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, 但是無法對(duì)其進(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ā)生變化,所以無法對(duì)這個(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尋址替代的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
go語(yǔ)言阻塞函數(shù)和非阻塞函數(shù)實(shí)現(xiàn)
本文主要介紹了go語(yǔ)言阻塞函數(shù)和非阻塞函數(shù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03go語(yǔ)言實(shí)現(xiàn)http服務(wù)端與客戶端的例子
今天小編就為大家分享一篇go語(yǔ)言實(shí)現(xiàn)http服務(wù)端與客戶端的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08GoLang string與strings.Builder使用對(duì)比詳解
這篇文章主要介紹了GoLang string與strings.Builder使用對(duì)比,Builder 用于使用 Write 方法有效地構(gòu)建字符串。它最大限度地減少了內(nèi)存復(fù)制。零值可以使用了。不要復(fù)制非零生成器2023-03-03試了下Golang實(shí)現(xiàn)try catch的方法
雖然在使用Golang的時(shí)候發(fā)現(xiàn)沒有try catch這種錯(cuò)誤處理機(jī)制但是想一想golang作為一門優(yōu)雅的語(yǔ)言,似乎也是情理之中。那么夠怎么捕獲異常呢,本文就來介紹一下2021-07-07golang常用庫(kù)之字段參數(shù)驗(yàn)證庫(kù)-validator使用詳解
這篇文章主要介紹了golang常用庫(kù):字段參數(shù)驗(yàn)證庫(kù)-validator使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借價(jià)值,需要的朋友可以參考下2020-10-10使用Go語(yǔ)言封裝實(shí)現(xiàn)郵件發(fā)送功能
在現(xiàn)代 Web 開發(fā)中,郵件發(fā)送功能是一個(gè)常見的需求,本文將介紹如何在 Go 語(yǔ)言中封裝一個(gè)通用的郵件發(fā)送包,支持驗(yàn)證碼發(fā)送和通用郵件發(fā)送,需要的可以參考下2025-03-03Golang實(shí)現(xiàn)gRPC的Proxy的原理解析
gRPC是Google開始的一個(gè)RPC服務(wù)框架, 是英文全名為Google Remote Procedure Call的簡(jiǎn)稱,廣泛的應(yīng)用在有RPC場(chǎng)景的業(yè)務(wù)系統(tǒng)中,這篇文章主要介紹了Golang實(shí)現(xiàn)gRPC的Proxy的原理,需要的朋友可以參考下2021-09-09