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語言阻塞函數(shù)和非阻塞函數(shù)實(shí)現(xiàn)
本文主要介紹了go語言阻塞函數(shù)和非阻塞函數(shù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
go語言實(shí)現(xiàn)http服務(wù)端與客戶端的例子
今天小編就為大家分享一篇go語言實(shí)現(xiàn)http服務(wù)端與客戶端的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
GoLang 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)雅的語言,似乎也是情理之中。那么夠怎么捕獲異常呢,本文就來介紹一下2021-07-07
golang常用庫之字段參數(shù)驗(yàn)證庫-validator使用詳解
這篇文章主要介紹了golang常用庫:字段參數(shù)驗(yàn)證庫-validator使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借價(jià)值,需要的朋友可以參考下2020-10-10
使用Go語言封裝實(shí)現(xiàn)郵件發(fā)送功能
在現(xiàn)代 Web 開發(fā)中,郵件發(fā)送功能是一個(gè)常見的需求,本文將介紹如何在 Go 語言中封裝一個(gè)通用的郵件發(fā)送包,支持驗(yàn)證碼發(fā)送和通用郵件發(fā)送,需要的可以參考下2025-03-03
Golang實(shí)現(xiàn)gRPC的Proxy的原理解析
gRPC是Google開始的一個(gè)RPC服務(wù)框架, 是英文全名為Google Remote Procedure Call的簡稱,廣泛的應(yīng)用在有RPC場(chǎng)景的業(yè)務(wù)系統(tǒng)中,這篇文章主要介紹了Golang實(shí)現(xiàn)gRPC的Proxy的原理,需要的朋友可以參考下2021-09-09

