GO语言如何在地图指针内部改变对象的值

时间:2015-03-05 13:41:36

标签: go

我该怎么做?

我有对象列表,我想列出所有并更改对象的名称。 我有列表,我正在做一段时间发送到另一个功能,我在那里更改名称,但名称不保存。

知道我该怎么做?

https://play.golang.org/p/el3FtwC-3U

如果有任何书籍我可以阅读以了解更多信息,请。 感谢帮助我= D

2 个答案:

答案 0 :(得分:0)

我没有找到如何在地图中获取指向值的指针,因此我认为您必须使用map[string]*Track,然后在Track函数中使用指向Working结构的指针。

请参阅https://play.golang.org/p/2XJTcKn1md

如果您正在尝试并行修改曲目,您可能正在寻找类似https://play.golang.org/p/1GhST34wId

的内容

注意chanel中的丢失缓冲区和go Working中的for range tracks

答案 1 :(得分:0)

在范围循环中:

for _, track := range tracks {
    // send track to channel to change the name
    Working(&track, &c)
}

track变量实际上是地图中包含的值的副本,因为此处的分配适用于Track值类型,而在Go中,值在分配时会被复制。

您应该做的是使用地图的键并从循环中分配值。

for key := range tracks {
    t := tracks[key]
    // send track to channel to change the name
    Working(&t, &c)
    tracks[key] = t
}

请参阅https://play.golang.org/p/9naDP3SfNh