有这个结构

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/

10-12 23:43