英文:
How do I get all the data in for loop in map of map in go?
问题
package main
type Stream struct {
Labels string
Entries []Entry
}
type Entry struct {
Timestamp time.Time
Line string
}
现在我创建了一个块的映射
chunks := make(map[string]*Stream)
我正在发送一个测试数据,并尝试在这里组成我的块
for _, line := range Lines {
fmt.Println(line.Logmsg) // 如果我在这里打印,我会得到所有的数据
chunks["label"] = &Stream{
Labels: "label",
Entries: []Entry{
Timestamp: time.Now(),
Line: line.Logmsg,
},
}
}
fmt.Println(chunks)
我在for循环中只看到最后一个数据。
与第一个println相比,我没有看到所有的数据,我在这里做错了什么吗?
英文:
package main
type Stream struct {
Labels string
Entries []Entry
}
type Entry struct {
Timestamp time.Time
Line string
}
now I have created a map of chunks
chunks := make(map[string]*Stream)
I am sending one test data and trying to form my chunks here
for _, line := range Lines {
fmt.Println(line.Logmsg) // if I do print here I am getting all the data here
chunks["label"] = &Stream{
Labels: "label"
Entries: []Entry{
Timestamp: time.Now(),
Line: line.Logmsg
},
},
}
fmt.Println(chunks)
I am seeing the last data in the for loop here.
I am not seeing all the data compared to first println, is there anything I am doing wrong here ?
答案1
得分: 2
在地图中,所有插入的元素都在相同的键"label"
下,因此最终地图中只包含一个元素。
要么为每个元素使用不同的标签,要么使用切片。
英文:
All insertions in the map are under the same key "label"
, so in the end the map will only contains one element.
Either use a different label for each element or use a slice.
答案2
得分: 1
你正在为所有行分配相同的映射键"label":
chunks["label"] = &Stream{...}
因此,最后一行将始终覆盖先前设置的值。这就是为什么你总是只看到最后一行。
为了使最终的chunks包含所有数据,你需要在这个映射中使用某种动态键。可以使用line的某个属性,例如:
chunks[line.Label] = &Stream{...}
我不知道你的数据,所以无法告诉你可以使用line的哪个属性。
英文:
You are assigning the stream to the same map key "label" for all lines:
chunks["label"] = &Stream{...}
Therefore the last line will always overwrite the previously set value. That is why you always only see that last line.
In order for the chunks in the end containing all data, you need to use some kind of dynamic key in this map. Something like:
chunks[line.Label] = &Stream{...}
I don't know your data so I can't tell which property you could use from line.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论