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

Go二叉树手术室预订系统返回值异常:false意外变为true

手术室预订系统BinaryTree插入返回值异常排查

问题概述

基于BinaryTree实现手术室预订功能时出现返回值异常:BinaryNode.insert代码中明确执行return false, nil,但上层BinaryTree.insert接收到的返回值却是true, nil。测试场景中插入2022-01-01 18:00至20:00的预订,预期返回false但实际返回true,导致测试不通过,怀疑竞态条件是诱因。

关键测试日志

2023/01/13 12:34:18 node         2
2023/01/13 12:34:18 diff         1h0m0s true
2023/01/13 12:34:18 existing     2022-01-01 15:00:00 +0700 WIB 2022-01-01 17:00:00 +0700 WIB
2023/01/13 12:34:18 new          2022-01-01 18:00:00 +0700 WIB 2022-01-01 20:00:00 +0700 WIB
2023/01/13 12:34:18 BookingKamarOperasi_v2.isLessThanTwoHoursApart return 2, nil
2023/01/13 12:34:18 BinaryNode.ok 2 false
2023/01/13 12:34:18 BinaryTree.insert ok true <nil>
2023/01/13 12:34:18 SafeDB_v2.Insert true

相关代码片段

BinaryNode.insert 返回逻辑

log.Println("BinaryNode.ok " + strconv.Itoa(isLess) + " " + strconv.FormatBool(false))
return false, nil

BinaryTree.insert 接收返回值逻辑

ok, err := t.root.insert(data)
log.Println("BinaryTree.insert ok", ok, err)

排查方向

  • 分支逻辑校验:检查BinaryNode.insert是否存在其他return路径,比如在打印日志的return语句之前,是否有提前返回true的分支;或者确认当前打印日志的return语句是否确实被执行到,而非其他节点的日志输出。
  • 竞态条件验证:若BinaryTree存在并发访问场景,检查是否有多个goroutine同时操作root节点,导致返回值被覆盖或逻辑执行混乱,比如insert过程中root节点被其他协程修改,上层接收到错误的返回值。
  • 返回值传递检查:确认BinaryNode.insert的返回值类型与BinaryTree.insert接收的类型完全匹配,排查是否存在类型转换错误或返回值被意外修改的情况。
  • 日志链路追踪:给日志添加唯一标识(如请求ID、节点ID),明确每条日志对应的调用链路,避免不同insert操作的日志交叉导致误解。
  • 递归逻辑校验:若BinaryNode.insert是递归实现,检查递归返回时是否正确传递了返回值,比如是否存在递归调用后错误覆盖原本false返回值、返回true的情况。

内容的提问来源于stack exchange,提问作者Jason Rich Darmawan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:35:26