在Golang中将地图分配给地图

时间:2015-11-05 14:39:33

标签: go maps

我创建并预填充一个类似的子地图,然后当我指定它时,我发现我最终引用了相同的变量。

您可以查看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是最好的方法。这是对的吗?

1 个答案:

答案 0 :(得分:1)

  

在这种情况下,一种方法是将地图分钟复制到我每小时创建的新地图中。这是唯一的方法吗?

是。还有什么可行? Go没有写入或类似的概念。

  

如果是,那么在for循环上复制地图是最好的方法。这是对的吗?

是。 (但取决于你对“最佳”的定义。)