Golang Map value不可寻址使用指针类型代替示例详解

 更新时间:2023年11月01日 14:40:40   作者:Peanut  
这篇文章主要为大家介绍了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])
}

以上代码报错:./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])
}

以上就是Golang Map value不可寻址使用指针类型代替示例详解的详细内容,更多关于Golang Map value寻址替代的资料请关注脚本之家其它相关文章!

相关文章

  • 一文带你理解Go语言中方法的本质

    一文带你理解Go语言中方法的本质

    我们知道,Go语言从设计伊始,就不支持经典的面向对象语法元素,但 Go 语言仍保留了名为“方法(method)”的语法元素,下面我们就来带大家深入了解一下Go语言中的方法吧
    2023-11-11
  • go语言阻塞函数和非阻塞函数实现

    go语言阻塞函数和非阻塞函数实现

    本文主要介绍了go语言阻塞函数和非阻塞函数实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • go语言实现http服务端与客户端的例子

    go语言实现http服务端与客户端的例子

    今天小编就为大家分享一篇go语言实现http服务端与客户端的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • GoLang string与strings.Builder使用对比详解

    GoLang string与strings.Builder使用对比详解

    这篇文章主要介绍了GoLang string与strings.Builder使用对比,Builder 用于使用 Write 方法有效地构建字符串。它最大限度地减少了内存复制。零值可以使用了。不要复制非零生成器
    2023-03-03
  • 试了下Golang实现try catch的方法

    试了下Golang实现try catch的方法

    虽然在使用Golang的时候发现没有try catch这种错误处理机制但是想一想golang作为一门优雅的语言,似乎也是情理之中。那么够怎么捕获异常呢,本文就来介绍一下
    2021-07-07
  • golang常用库之字段参数验证库-validator使用详解

    golang常用库之字段参数验证库-validator使用详解

    这篇文章主要介绍了golang常用库:字段参数验证库-validator使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下
    2020-10-10
  • Go语言Gin处理响应方式详解

    Go语言Gin处理响应方式详解

    gin框架封装了常用的数据格式方法响应于客户端,下面这篇文章主要给大家介绍了关于Go语言Gin处理响应方式的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 一文掌握Golang模糊测试

    一文掌握Golang模糊测试

    本文主要介绍了一文掌握Golang模糊测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 使用Go语言封装实现邮件发送功能

    使用Go语言封装实现邮件发送功能

    在现代 Web 开发中,邮件发送功能是一个常见的需求,本文将介绍如何在 Go 语言中封装一个通用的邮件发送包,支持验证码发送和通用邮件发送,需要的可以参考下
    2025-03-03
  • Golang实现gRPC的Proxy的原理解析

    Golang实现gRPC的Proxy的原理解析

    gRPC是Google开始的一个RPC服务框架, 是英文全名为Google Remote Procedure Call的简称,广泛的应用在有RPC场景的业务系统中,这篇文章主要介绍了Golang实现gRPC的Proxy的原理,需要的朋友可以参考下
    2021-09-09

最新评论