首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针和结构成员函数

指针和结构成员函数
EN

Stack Overflow用户
提问于 2016-10-18 15:27:53
回答 1查看 4.5K关注 0票数 1

调用功能

当我定义一个struct Lock和一个函数Test时,使用struct Lock作为函数接收器。

代码语言:javascript
复制
type Lock struct {
}

func (self Lock) Test() {
    fmt.Println("Test Func")
}

我发现我可以用Lock结构指针调用这个函数。

代码语言:javascript
复制
lock := &Lock{}
lock.Test()

同样,如果我将一个struct Lock和一个函数Test定义为Lock的指针作为接收者,我可以通过Lock struct实例调用这个函数。

因此,无论接收者是结构本身还是结构指针,我都可以通过两者调用这个函数?原因是什么。据我理解,结构和结构指针完全是两种不同的类型!

接口

如果像这样定义接口Locker

代码语言:javascript
复制
type Locker interface {
    Test()
}

并定义一个struct Lock和函数Test,并以struct 实例作为接收方,我不能将struct指针变量分配给Locker接口var。

相反,如果定义一个struct Lock和一个函数Test,并以struct 指针作为接收者,那么将一个struct实例变量赋给Locker接口var可以工作!

我对语言设计很困惑。有人能给我一些建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 15:51:10

通常,在引擎盖下为您做一些事情,这是典型的情况之一。

当您定义一个以struct作为接收方的函数,并向它传递指向该结构的指针时,然后进行转换:它传递指向的结构的副本。

当您用指针定义函数作为接收器,并将其传递给结构时,Go将创建指向此结构的指针。

但是,在定义接口时,您正在处理类型:Locker接口定义了实现函数Test()的类型。

对于接口,Go对您没有帮助:如果您的类型没有实现一个方法,那么它就不会实现这个接口。这里没有隐藏的皈依。

通常,最好弄清楚你想要什么和你想要什么,从而防止你去做那些奇怪的转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40112250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档