为了账号安全,请及时绑定邮箱和手机立即绑定

这两段 Go 代码等价吗?

这两段 Go 代码等价吗?

Go
心有法竹 2021-12-07 16:36:22
有这个结构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
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

据我所知,它们的工作方式相同。

一个区别是只有第一个可以满足接口规范。


查看完整回答
反对 回复 2021-12-07
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

这些“功能”以相同的方式运行,实际上它们的调用方式几乎相同。该方法被称为方法表达式,接收者作为第一个参数:


var s Square


// The method call

s.SetSide(5)

// is equivalent to the method expression

(*Square).SetSide(&s, 5)

该SetSide方法也可以用作方法值来满足函数签名func(int),而SetSquareSide不能。


var f func(int)


f = a.SetSide

f(9)

这是在方法集Square满足接口的明显事实之上


interface {

    SetSide(int)

}


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信