共计 894 个字符,预计需要花费 3 分钟才能阅读完成。
Golang Map 元素取址:
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 的扩容,会导致地址的变动。
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])
}
正文完