【发布时间】:2021-09-21 20:15:09
【问题描述】:
我遇到了这个简单的 Golang 代码,并对 Go 在这里的行为感到惊讶。有人能解释一下这里发生了什么,以及如何正确编写下面的代码吗?
如您所见,我有一个map,其中的键是int 的array。我添加了几个值,然后循环遍历map,将每个键转换为slice,并将每个键附加到[][]int 类型的对象。
func test() {
myMap := make(map[[3]int]bool)
myMap[[3]int{1, 2, 3}] = true
myMap[[3]int{0, 5, 4}] = true
myMap[[3]int{9, 7, 1}] = true
myMap[[3]int{0, 2, 8}] = true
array := [][]int{}
for val := range myMap {
array = append(array, val[:])
}
fmt.Println(array)
}
我原以为最后一行会打印出[[1,2,3], [0,5,4], [9,7,1], [0,2,8]],但令我惊讶的是,它会多次打印出[[0 2 8] [0 2 8] [0 2 8] [0 2 8]],或[[9 7 1] [9 7 1] [9 7 1] [9 7 1]],或其他仅包含一个键的变体。
我的 go 版本是1.16.5
【问题讨论】: