这个区域的所有日志都不打印(显示里面没有运行)。不管怎样,最后一行是执行的。我很沮丧,很伤心,完全不知道。如果你有什么想法,非常感谢。
if !reflect.DeepEqual(MachineNow.TCP_machine.Two_D_Dta_Old, twoD_new) {
//the situation should not be executed
log.Println("new to old updated") //all log is not printing (O)
fmt.Println("new", twoD_new[0][0])
fmt.Println("old", MachineNow.TCP_machine.Two_D_Dta_Old[0][0])
MachineNow.TCP_machine.Two_D_Dta_Old = twoD_new //this line is doing anyway (X)
}
- 您检查过您的" log "输出和级别了吗?也许您将输出级别设置为高于"Println",因此它被简单地忽略。
- 试着使用debug来知道它是否运行到这个代码块或只是你的假设。
- 还有一件事要检查的是:如果你通过单元测试运行它,你需要添加"-v"标志来显示输出。
解决方案:将对象转换为JSON格式并分配给对象。我不知道为什么,但这是避免执行这一行的唯一方法。我以为这只是一个错误,现在看来,这行确实执行不明原因。它运行的是Windows x64。
new_json, _ := json.Marshal(twoD_new)
_ = json.Unmarshal([]byte(new_json), &MachineNow.TCP_machine.Two_D_Dta_Old)