Go中Map原地修改value

首先记住一句话,等号两边类型匹配

在Go语言中,Map中的值是不可以原地修改的,如:

package main

type Student struct {
    Name string
    Id int
}

func main() {
    s := make(map[string]Student)
    s["chenchao"] = Student{
        Name:"chenchao",
        Id:111,
    }
    s["chenchao"].Id = 222

}

上面的代码会编译失败,因为在go中 map中的赋值属于值copy,就是在赋值的时候是把Student的完全复制了一份,复制给了map。而在go语言中,是不允许将其修改的。
但是如果map的value为int,是可以修改的,因为修改map中的int属于赋值的操作。

package main

type Student struct {
    Name string
    Id int
}

func main() {
    s1 := make(map[string]int)
    s1["chenchao"] = 2
    s1["chenchao"] = 3
}

那么,如何在go语言中原地修改map中的value呢? 答案是:传指针!

package main

import "fmt"

type Student struct {
    Name string
    Id int
}

func main() {
    s := make(map[string]*Student)
    s["chenchao"] = &Student{
        Name:"chenchao",
        Id:111,
    }
    s["chenchao"].Id = 222
    fmt.Println(s)
}

在结构体比较大的时候,用指针效率会更好,因为不需要值copy
当然,如果map中的value为 *int指针类型,那么在赋值时不可以用&123,因为int为常亮,不占内存,没有内存地址

package main

import "fmt"

type Student struct {
    Name string
    Id int
}

func main() {
    s2 := make(map[string]*int)
    n := 1
    s2["chenchao"] = &n
    fmt.Println(s2)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,036评论 18 399
  • 出处---Go编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
    Tuberose阅读 18,643评论 1 46
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,879评论 0 9
  • Go语言做Web编程非常方便,并且在开发效率和程序运行效率方面都非常优秀。相比于Java,其最大的优势就是简便易用...
    暗黑破坏球嘿哈阅读 12,946评论 6 66
  • 说起最近热播的《欢乐颂2》,最招人待见的一定就是刘涛饰演的安迪了。安迪确实堪称完美,集成功、貌美、高智商于一身,羡...
    田小等阅读 4,633评论 0 11

友情链接更多精彩内容