猿问

这两段 Go 代码等价吗?

有这个结构


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


心有法竹
浏览 162回答 2
2回答

胡说叔叔

据我所知,它们的工作方式相同。一个区别是只有第一个可以满足接口规范。

犯罪嫌疑人X

这些“功能”以相同的方式运行,实际上它们的调用方式几乎相同。该方法被称为方法表达式,接收者作为第一个参数:var s Square// The method calls.SetSide(5)// is equivalent to the method expression(*Square).SetSide(&s, 5)该SetSide方法也可以用作方法值来满足函数签名func(int),而SetSquareSide不能。var f func(int)f = a.SetSidef(9)这是在方法集Square满足接口的明显事实之上interface {    SetSide(int)}
随时随地看视频慕课网APP

相关分类

Go
我要回答