Go 中为何无法直接调用刚实例化的对象方法?

go 中为何无法直接调用刚实例化的对象方法?

go 为何无法直接调用刚实例化的对象方法

在 go 中实例化对象后立即调用其方法时,可能会遇到不可调用指针方法的错误。对此,下面提供了解释:

go 语言中方法调用的语法为 x.m(),其中 x 为对象,m 为要调用的方法。值得注意的是,如果方法接收器(方法参数的第一个参数)为指针类型,则该方法只能被可寻址的对象调用。

可寻址对象包括变量、指针间接或切片索引操作、可寻址结构体的字段选择器或可寻址数组的数组索引操作。但需注意,复合字面量并不是可寻址的。

因此,当您尝试直接调用复合字面量的指针方法时,编译器会报告无法调用指针方法的错误。例如,以下代码将引发错误:

b := stringclass{}.hasvalue(this.identityno)

要解决此问题,可以将复合字面量转换为可寻址指针,然后调用方法。可以通过以下方式实现:

(&StringClass{}).HasValue(this.identityNo)

需要注意的是,& 操作符可以应用于复合字面量,作为一种例外情况。

通过理解可寻址对象的概念,您可以正确地实例化对象并调用指针方法。

以上就是Go 中为何无法直接调用刚实例化的对象方法?的详细内容,更多请关注其它相关文章!