指导原则
1.不使用指向interface的指针
直接将接口作为值传递即可
传递过程中,底层数据仍然可以是指针
接口在底层的实质有两个字段:1.指向特定类型信息的指针
2.数据指针
2.接收器
①使用值接收器的方法可以通过值或者指针调用
②使用指针接收器的方法只能在指针或者可寻址值调用
type S struct {
data string
}
func (s S) Read() string {
return s.data
}
func (s *S) Write(str string) {
s.data = str
}
sVals := map[int]S{
1: {
"A"}}
// 你只能通过值调用 Read
sVals[1].Read()
// 这不能编译通过:
// sVals[1].Write("test")
③但是通过指针既可以调用使用值接收器的方法,也可以调用使用指针接收器的方法
sPtrs := map[int]*S