Golang Map value不可尋址使用指針類型代替示例詳解
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])
}以上代碼報(bào)錯(cuò):./map.go:19:20: cannot assign to struct field user[uid].UserName in map
原因是 map 元素是無法取址的,也就說可以得到 user[uid].UserName, 但是無法對其進(jìn)行修改。
解決辦法 使用指針的map
golang里面的map,當(dāng)通過key獲取到value時(shí),這個(gè)value是不可尋址的,因?yàn)閙ap 會(huì)進(jìn)行動(dòng)態(tài)擴(kuò)容,當(dāng)進(jìn)行擴(kuò)展后,map的value就會(huì)進(jìn)行內(nèi)存遷移,其地址發(fā)生變化,所以無法對這個(gè)value進(jìn)行尋址。也就是造成上述問題的原因所在。map的擴(kuò)容與slice不同,那么map本身是引用類型,作為形參或返回參數(shù)的時(shí)候,傳遞的是值的拷貝,而值是地址,擴(kuò)容時(shí)也不會(huì)改變這個(gè)地址。而slice的擴(kuò)容,會(huì)導(dǎo)致地址的變化。
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])
}以上就是Golang Map value不可尋址使用指針類型代替示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Golang Map value尋址替代的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言處理超大字符串型整數(shù)加減經(jīng)典面試詳解
這篇文章主要為大家介紹了Go語言處理超大字符串型整數(shù)加減經(jīng)典面試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Goland 關(guān)閉自動(dòng)移除未使用的包操作
這篇文章主要介紹了Goland 關(guān)閉自動(dòng)移除未使用的包操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
golang?select?機(jī)制和超時(shí)問題
golang 中的協(xié)程使用非常方便,但是協(xié)程什么時(shí)候結(jié)束是一個(gè)控制問題,可以用 select 配合使用,這篇文章主要介紹了golang?select?機(jī)制和超時(shí)問題,需要的朋友可以參考下2022-06-06
Go使用pprof進(jìn)行CPU,內(nèi)存和阻塞情況分析
Go 語言提供了強(qiáng)大的 pprof工具,用于分析 CPU、內(nèi)存、Goroutine 阻塞等性能問題,幫助開發(fā)者優(yōu)化程序,提高運(yùn)行效率,下面我們就來深入了解下pprof 的使用吧2025-03-03
Golang cron 定時(shí)器和定時(shí)任務(wù)的使用場景
Ticker是一個(gè)周期觸發(fā)定時(shí)的計(jì)時(shí)器,它會(huì)按照一個(gè)時(shí)間間隔往channel發(fā)送系統(tǒng)當(dāng)前時(shí)間,而channel的接收者可以以固定的時(shí)間間隔從channel中讀取事件,這篇文章主要介紹了Golang cron 定時(shí)器和定時(shí)任務(wù),需要的朋友可以參考下2022-09-09

