You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang函数执行后无法返回?排查后发现非该函数问题

程序挂起排查:Go extractKeyValuePairs函数循环未退出问题

我编写了如下extractKeyValuePairs函数:

func extractKeyValuePairs(taskFilePathList []string) []KeyValue {
    keyValueList := []KeyValue{}
    log.Printf("%v", taskFilePathList)
    for _, fileName := range taskFilePathList {
        file, err := os.Open(fileName)
        if err != nil {
            log.Fatal(err)
        }
        dec := json.NewDecoder(file)
        for {
            var kv KeyValue
            err := dec.Decode(&kv)
            if err != nil {
                file.Close()
                break
            }
            keyValueList = append(keyValueList, kv)
        }
    }
    return keyValueList
}

运行该函数后程序一直无法返回,在循环内添加打印语句后发现,函数已解码所有文件中的键值对并添加到keyValueList,但循环始终未退出,希望得到排查线索。

排查线索

  • 打印具体解码错误:在err != nil分支添加日志,输出错误详情,确认是否是解码异常导致循环未终止:
    err := dec.Decode(&kv)
    if err != nil {
        log.Printf("解码文件%s失败: %v", fileName, err)
        file.Close()
        break
    }
    
  • 检查文件类型与内容:如果处理的不是普通本地文件(比如管道、网络流),可能会出现一直等待数据的情况;同时确认JSON文件结尾是否存在无效内容(多余字符、未闭合结构),导致解码器无法识别EOF。
  • 验证结构体与JSON匹配:检查KeyValue结构体的字段标签、类型是否和JSON数据完全匹配,不匹配的字段可能导致解码逻辑异常,无法正常触发终止条件。

更新:我发现并非该函数导致程序挂起,请求管理员删除该帖。

内容的提问来源于stack exchange,提问作者zening.chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:12:44