golang中值类型/指针类型的变量区别总结

2020-01-28 12:52:15于海丽


type S struct { *T }

使用时这样:


 t1 := T{"t1"} 
 s := S{&t1} 
 fmt.Println("M1调用前:", s.Name) 
 s.M1() 
 fmt.Println("M1调用后:", s.Name) 
 fmt.Println("M2调用前:", s.Name) 
 s.M2() 
 fmt.Println("M2调用后:", s.Name) 
 fmt.Println(t1.Name)

M1调用前: t1

M1调用后: t1

M2调用前: t1

M2调用后: name2

name2

惟一的区别是最后 t1 的值变了,因为我们复制的是指针。

接着赋值给接口试试:


 var intf Intf = s i
 ntf.M1() 
 intf.M2() 
 fmt.Println(s.Name)

编译没有报错。这里我们传递给 intf 的是值类型而不是指针,为什么可以通过呢?

拷贝 s 的时候里面的 T 是指针类型,所以调用 M2() 的时候传递进去的是一个指针。

var intf Intf = &s 的效果和上面一样。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对易采站长站的支持。