Golang Map元素取址:golang
package main
import "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的扩容,会致使地址的变化。json
package main
import "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])
}