您的位置 首页 知识分享

Go 结构体对象可以调用接收指针类型的方法吗?

go 支持用结构体对象调用接收指针类型的方法的版本 原本认为接收类型为指针的方法只能接收指针调用,但事实并非如…

Go 结构体对象可以调用接收指针类型的方法吗?

go 支持用结构体对象调用接收指针类型的方法的版本

原本认为接收类型为指针的方法只能接收指针调用,但事实并非如此。在 go 中,可以通过中间变量,使用结构体对象调用接收指针类型的方法。

此功能在 go 的所有版本中都支持,意味着从 go 1.0 开始就可用。直接使用字面量调用这种方法是不被允许的,但通过中间变量则可以。

举个例子:

package main  import "fmt"  type printer interface {     print() }  type foo struct {     i int }  func (f *foo) print() {     f.i = 2     fmt.println(f) }  func main() {     f1 := foo{}     var f2 any = f1     if _, ok := f2.(printer); ok {         fmt.println("ok")     }     f1.print()     fmt.println(f1) }
登录后复制

这段代码编译输出:

OK {2} {2}
登录后复制

这表明,虽然直接用字面量调用 foo{}.print() 会报错,但通过中间变量 f1 调用 f1.print() 却是允许的。

因此,go 从所有版本开始就支持用结构体对象调用接收指针类型的方法,但需要注意可寻址性(addressable)相关规则。

以上就是Go 结构体对象可以调用接收指针类型的方法吗?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/4911.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部