首先看下例子如下(可直接执行):
package main
import(
"fmt"
)
type SS struct {
Name string
}
func main() {
import(
"fmt"
)
type SS struct {
Name string
}
func main() {
ss := SS{
Name: "struct",
}
ms := make(map[int]SS)
ms[1] = ss
sp := &SS{
Name: "pointer",
}
fmt.Printf("sp:---%p\r\n", sp)
mp := make(map[int]*SS)
mp[1] = sp
Name: "struct",
}
ms := make(map[int]SS)
ms[1] = ss
sp := &SS{
Name: "pointer",
}
fmt.Printf("sp:---%p\r\n", sp)
mp := make(map[int]*SS)
mp[1] = sp
//修改 struct 类型的,会报错
//ms[1].Name = "new struct name"
mp[1].Name = "new struct name"
fmt.Printf("ss:%+v\n", ss)
fmt.Printf("sp:%+v\n", sp)
fmt.Printf("sp:---%p\r\n", mp[1])
}
解答:有一点很重要:map中的元素不是变量,因此不能寻址!!
所以如果要修改map中的struct的成员变量的值,需要将struct修改成指针形式