栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

指针接收器和值接收器在Golang中是什么意思?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指针接收器和值接收器在Golang中是什么意思?

既然您已经弄清楚了,您对术语“ 接收者”
而不是指针/值的区别感到困惑。在Go中,“接收器”是指为接口目的而在方法上定义的值。您可以将接收器视为函数的第一个参数的特例。

func (m MyStruct) DoStuff()

这就是所谓的“值接收器”,它在 MyStruct 上定义。这在功能上等同于:

func DoStuff(m MyStruct)

除:

使用“接收器”,您可以使用“。”来调用函数,就像在许多OO语言中一样:

 m := MyStruct{}  m.DoStuff() // as opposed to DoStuff(m)

类型是接收者的一组方法定义了它实现的接口:

type DoesStuff interface {    DoStuff()}func DoSomething(d DoesStuff) {    d.DoStuff()}func main() {    m := MyStruct{}    DoSomething(m)}

那么什么是指针接收器?看起来像这样:

func (m *MyStruct) DoOtherStuff()

区别恰恰是指针和值之间的区别。尽管会发生轻微的语义变化。Go会自动寻址和自动取消引用指针(在大多数情况下),因此

m := MyStruct{};m.DoOtherStuff()
Go仍然可以工作,因为Go会自动
(&m).DoOtherStuff()
为您服务。(自然,您也可以自由地做
m :=&MyStruct{}; m.DoOtherStuff
)。此外,接口是在指针上定义的,因此:

type DoesOtherStuff interface {    DoOtherStuff()}func DoSomethingElse(d DoesOtherStuff) {    d.DoOtherStuff()}func main() {    m := MyStruct{}    // DoSomethingElse(m) will fail since because the interface    // DoesOtherStuff is defined on a pointer receiver and this is a value    DoSomethingElse(&m)}

如果您仍然对 何时
使用指针接收器与变量接收器感到困惑,那么简短的答案是:可能是指针接收器。长答案已经被回答了好几次,但是我将其链接到这里仅仅是因为在我的历史记录中很容易找到它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号