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 结构体对象可以调用接收指针类型的方法吗?的详细内容,更多请关注抖狐科技其它相关文章!
-
华硕推出研扬 BOXER
本站 11 月 11 日消息,华硕现推出一款研扬boxer-8642ai迷你主机,这款主机主要定位边缘计算 / 自动化 / 工控领域,基于英伟达 jetson agx orin ai平台打造,面向商业...
-
《剑网3》达摩洞声望提升方法
剑网3达摩洞声望提升攻略 各位剑网3玩家,是否好奇如何提升达摩洞声望?达摩洞是游戏中一个神秘的禁地,想要提高声望的玩家们请看过来!php小编百草将详细介绍如何通过击败首领来提升声望,敬请阅读下文了解更...
-
《冒险大作战》神灯升级经验&升级箱子规律介绍
在《冒险大作战》中,神灯升级成为了玩家提升实力的关键。作为特殊装备,神灯不仅提供属性加成,还赋予角色技能效果,极大增强了战斗能力。随着神灯等级的提升,玩家可获得更高稀有度的装备,提升品质,进一步增强战...
-
钉钉怎么注销账号手机号
确认账号类型并按步骤操作注销:企业账号由管理员注销,个人账号需通过钉钉 app 完成,包括验证手机号、阅读协议和确认删除数据。注销成功后,数据将被永久删除,请提前备份。如何注销钉钉账号手机号 第一步:...
-
如何彻底关闭windows defender安全中心
windows defender 安全中心是 windows 10 和 11 系统中内置的安全工具,可帮助保护您的计算机免受威胁。然而,有时您可能需要暂时或永久关闭它,以进行故障排除或安装第三方安全软...