go 为何无法直接调用刚实例化的对象方法
在 go 中实例化对象后立即调用其方法时,可能会遇到不可调用指针方法的错误。对此,下面提供了解释:
go 语言中方法调用的语法为 x.m(),其中 x 为对象,m 为要调用的方法。值得注意的是,如果方法接收器(方法参数的第一个参数)为指针类型,则该方法只能被可寻址的对象调用。
可寻址对象包括变量、指针间接或切片索引操作、可寻址结构体的字段选择器或可寻址数组的数组索引操作。但需注意,复合字面量并不是可寻址的。
因此,当您尝试直接调用复合字面量的指针方法时,编译器会报告无法调用指针方法的错误。例如,以下代码将引发错误:
b := stringclass{}.hasvalue(this.identityno)
登录后复制
要解决此问题,可以将复合字面量转换为可寻址指针,然后调用方法。可以通过以下方式实现:
(&StringClass{}).HasValue(this.identityNo)
登录后复制
需要注意的是,& 操作符可以应用于复合字面量,作为一种例外情况。
通过理解可寻址对象的概念,您可以正确地实例化对象并调用指针方法。
以上就是Go 中为何无法直接调用刚实例化的对象方法?的详细内容,更多请关注php中文网其它相关文章!