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]) }