go - 从 map 值追加 slice 不会影响 map

标签 go

mp := map[int][]int{}
slice := make([]int, 0, 1)
fmt.Printf("slice address:%p\n", slice)
mp[0] = slice
slice = append(slice, 1)
fmt.Println("after append")
fmt.Printf("slice address:%p\n", slice)
fmt.Println("slice:", slice)
fmt.Println("mp[0]:", mp[0])
fmt.Printf("mp[0] address:%p\n", mp[0])  

输出:

slice address:0xc042008f78  
after append  
slice address:0xc042008f78  
slice: [1]  
mp[0]: []  
mp[0] address:0xc042008f78

slice 的地址不会改变,因为它的上限在附加期间足够大。那么为什么map值不生效呢?

最佳答案

Go Slices: usage and internals 中所述,两个 slice 可能指向相同的内存位置,但可能具有不同的 lencap 属性。

关于go - 从 map 值追加 slice 不会影响 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056098/

相关文章:

http - 对每个请求使用相同的 header

global-variables - 全局变量/获取命令行参数并打印

go - golang中一流函数数组的语法令人困惑

http - 为什么我的 Hello World go 服务器被 ApacheBench 压垮了?

go - Range 函数在我的模板中提供了额外的输出

GORM 模型和表函数

unix - 当读取器断开连接时,命名管道 (FIFO) 数据会去哪里?

go - httputil.NewSingleHostReverseProxy调用增加了内存使用量

memory - 如果字段顺序不同,则结构具有不同的大小

google-app-engine - Golang 分析应用引擎测试