我创建并预填充一个类似的子地图,然后当我指定它时,我发现我最终引用了相同的变量。
您可以查看here
package main
import "fmt"
import "strconv"
func main() {
fmt.Println("Hello, playground")
var hour map[string]map[string]string
var minutes map[string]string
minutes = make(map[string]string)
for i := 0; i < 2; i++ {
iString := strconv.Itoa(i)
minutes[iString] = "EMPTY"
}
fmt.Println("Minutes")
fmt.Println(minutes)
hour = make(map[string]map[string]string)
for i := 0; i < 2; i++ {
iString := strconv.Itoa(i)
hour[iString] = make(map[string]string)
hour[iString] = minutes
}
fmt.Println("Hour")
fmt.Println(hour)
hour["0"]["1"] = "FULL"
fmt.Println("Modified Hour")
fmt.Println(hour)
}
因此,很明显hour["0"]["1"]
和hour["1"]["1"]
都已被修改。
在这种情况下,一种方法是将地图minutes
复制到我每小时创建的新地图中。 这个是唯一的方法吗?
如果是,那么copying maps over a for loop是最好的方法。这是对的吗?
答案 0 :(得分:1)
在这种情况下,一种方法是将地图分钟复制到我每小时创建的新地图中。这是唯一的方法吗?
是。还有什么可行? Go没有写入或类似的概念。
如果是,那么在for循环上复制地图是最好的方法。这是对的吗?
是。 (但取决于你对“最佳”的定义。)