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
相关产品推荐
相关产品推荐

