有这个结构
type Square struct {
Side int
}
这些等同于功能吗?
func (s *Square) SetSide(side int) {
s.Side = side
}
与
func SetSquareSide(s *Square, side int) {
s.Side = side
}
我知道它们也一样,但是它们真的等效吗?我的意思是,内部有什么区别吗?
在线尝试:https://play.golang.org/p/gpt2KmsVrz
最佳答案
这些“功能”以相同的方式起作用,实际上它们以几乎相同的方式被调用。该方法称为method expression,其中接收方为第一个参数:
var s Square
// The method call
s.SetSide(5)
// is equivalent to the method expression
(*Square).SetSide(&s, 5)
SetSide
方法也可以用作method value来满足函数签名func(int)
,而SetSquareSide
不能。var f func(int)
f = a.SetSide
f(9)
这是显而易见的事实,即
Square
的方法集满足接口(interface)interface {
SetSide(int)
}
关于go - 这两个Go代码段是否等效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35065179/