You need to enable JavaScript to run this app. Go语言for循环向map存数据仅显示最后一条该如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Go语言for循环向map存数据仅显示最后一条该如何解决

问题原因

你代码的问题主要有两点:

  • 每次循环都对chunks["label"]执行赋值操作,同一个map key被重复赋值时会直接覆盖旧值,所以最终map里只会保留最后一次循环创建的Stream实例
  • 你每次创建Stream时,Entries字段都被初始化为仅包含当前line的单元素切片,没有将新数据追加到已有切片中

额外注意:你提供的代码存在语法错误,切片中嵌入结构体字面量需要额外加一层{},正确写法为[]Entry{{Timestamp: time.Now(), Line: line.Logmsg}},否则会直接编译失败。

修复后的代码
for _, line := range Lines {
    fmt.Println(line.Logmsg)
    // 先校验对应key的Stream是否存在
    stream, ok := chunks["label"]
    if !ok {
        // 不存在则初始化Stream并存入map
        stream = &Stream{
            Labels:  "label",
            Entries: []Entry{},
        }
        chunks["label"] = stream
    }
    // 往已有的Entries切片追加新的Entry
    stream.Entries = append(stream.Entries, Entry{
        Timestamp: time.Now(),
        Line:      line.Logmsg,
    })
}

fmt.Println(chunks)

修复后首次循环会初始化chunks["label"]对应的Stream实例,后续循环都复用这个实例,把每一行的日志追加到Entries切片中,不会再出现数据覆盖的问题。

内容的提问来源于stack exchange,提问作者Rajib Mitra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 06:45:05