代码如下
type A struct {
}
func (this *A) Test() string {
return "123"
}
type C struct {
client *A
}
func main() {
c := C{}
log.Println(c.client.Test())
var a *A
log.Println(a.Test())
}
期望如 1.16.x会抛出 panic 错误才对
不知道为何1.17.x 为何会处理为正常输出
这样不是会出现更多坑吗
有疑问加站长微信联系(非本文作者)

不对 我使用1.16.5也不报错
朋友的go就报错
不报错
报错 此报错我觉得是正常的毕竟没实例化
看看下面这几种方式能否对你有启发
根据官方祖传代码显示,go天生就这样吧。
这真的是个feature,虽然很多人不喜欢
https://go.dev/tour/methods/12
涉及到对golang中结构体的定义。从这一点严格来说golang不是OO语言,更接近于c语言、而不是c++。 golang 中所有的方法都写在了结构体外,编译器应该将其处理为全局静态方法,只是第一个参数标明了它所属结构体。 A.Test() 方法没有访问this的结构体成员变量,不报错是正常的。如果访问了this的成员变量,就会报错。