代码如下
```
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 为何会处理为正常输出
这样不是会出现更多坑吗
涉及到对golang中结构体的定义。从这一点严格来说golang不是OO语言,更接近于c语言、而不是c++。
golang 中所有的方法都写在了结构体外,编译器应该将其处理为全局静态方法,只是第一个参数标明了它所属结构体。
A.Test() 方法没有访问this的结构体成员变量,不报错是正常的。如果访问了this的成员变量,就会报错。
#6
更多评论
![image.png](https://static.studygolang.com/211230/0e67a319d05c3b6e07ce90bf28b7a053.png)
不对 我使用1.16.5也不报错
朋友的go就报错
![image.png](https://static.studygolang.com/211230/37e9d1251c23e52ec474e770b487b4ad.png)
#1
```
func (this *A) Test() string {
return "123"
}
```
不报错
报错 此报错我觉得是正常的毕竟没实例化
```
func (this A) Test() string {
return "123"
}
```
#2