Golang Map元素取址:

package mainimport "fmt"type UserInfo struct {    Uid      string `json:"uid"`    UserName string `json:"user_name"`    Sex      int    `json:"sex"`}func main() {    var user = make(map[string]UserInfo)    uid := "0001"    user[uid] = UserInfo{        Uid:      uid,        UserName: "jack",        Sex:      1,    }    user[uid].UserName="polly"    fmt.Println(user[uid])}

以上代码报错:./map.go:19:20: cannot assign to struct field user[uid].UserName in map
起因是 map 元素是无奈取址的,也就说能够失去 user[uid].UserName, 然而无奈对其进行批改。
解决办法:应用指针的map
golang外面的map,当通过key获取到value时,这个value是不可寻址的,因为map 会进行动静扩容,当进行扩大后,map的value就会进行内存迁徙,其地址发生变化,所以无奈对这个value进行寻址。也就是造成上述问题的起因所在。map的扩容与slice不同,那么map自身是援用类型,作为形参或返回参数的时候,传递的是值的拷贝,而值是地址,扩容时也不会扭转这个地址。而slice的扩容,会导致地址的变动。

package mainimport "fmt"type UserInfo struct {    Uid      string `json:"uid"`    UserName string `json:"user_name"`    Sex      int    `json:"sex"`}func main() {    var user = make(map[string]*UserInfo)    uid := "0001"    user[uid] = &UserInfo{        Uid:      uid,        UserName: "jack",        Sex:      1,    }    user[uid].UserName="polly"    fmt.Println(user[uid])}