Go问答技术文章
-
Go test -shuffle=on 能随机化测试和基准的执行顺序,并报告可复现的种子。本文用一个共享 map 的例子说明如何暴露顺序依赖、固定种子重放失败,以及用清理和独立夹具修复测试隔离问题。161 收藏 -
解析 go test -json 时,关键不是逐行打印 JSON,而是按 Package 和 Test 保存事件流,再依据 Action 还原测试状态与输出。本文给出字段边界、并行处理和常见坑。411 收藏 -
go test 在包列表模式下会复用成功的测试结果,看到 (cached) 时不一定代表测试二进制被重新运行。本文说明 go test -count=1 的适用场景、GODEBUG=gocachetest=1 的排查方法,以及测试缓存和构建缓存的区别。128 收藏 -
Go 的 go、toolchain 指令和 GOTOOLCHAIN 并不是同一层配置:本文用实际选择场景拆开最低版本、建议版本、PATH 查找和自动下载的边界,帮助你稳定配置本地与 CI 工具链。225 收藏 -
go.work 的 use 不是递归目录扫描器。本文用 GOWORK、go list 和嵌套模块示例,说明本地 workspace 如何影响依赖解析,以及 CI 如何避免误用本地模块。108 收藏 -
Go 项目有 vendor 目录并不代表所有命令都会自动使用它。本文按 go.mod 的 go 版本、vendor/modules.txt、-mod 参数和 GOFLAGS 拆解判断条件,并给出 CI 中排查依赖来源的检查清单。369 收藏 -
Go 的 exclude 和 retract 都能避开问题版本,但作用域完全不同:exclude 是消费方修正自己的模块图,retract 是模块作者撤回已发布版本。本文用场景、示例和验证命令说明如何选择。227 收藏 -
Go 模块版本发布后发现严重问题,可以在 go.mod 中用 retract 声明单个版本或闭区间,再发布一个更高版本承载撤回信息,让后续 @latest 和升级选择避开坏版本。332 收藏 -
本地 go.mod replace 能编译,不代表 CI checkout 后也能找到同一个目录。本文从路径相对位置、替换模块的 go.mod、require 生效条件和 CI 工作区布局四处排查,给出可复现的检查命令与修复选择。342 收藏 -
Go sync.Mutex.TryLock 适合可选的最佳努力工作,不适合代替带超时的 Lock。本文解释成功与失败的同步语义、测试难点,以及如何用确定的同步结构保护核心业务。195 收藏 -
Go 的 sync.RWMutex 会让已持有的读者先完成,写者等待后阻止新的读者进入,从而避免写操作长期饥饿。367 收藏 -
Go 中通常把 sync.Mutex 作为值字段嵌入结构体,再用指针接收者编写方法。本文解释值接收者为何会复制锁,以及何时才适合使用 *sync.Mutex。443 收藏 -
Go 里 range channel 一直不退出,通常不是 range 语法错,而是发送方完成后没有关闭 channel。本文用一个最小生产者消费者示例拆清关闭责任,并说明多发送方、nil channel 和提前 close 的边界。245 收藏 -
time.AfterFunc 会在独立 goroutine 中执行回调。本文用事件 channel、stop 信号和 callbackDone 完成信号,说明如何让主 goroutine 安全接收超时事件,并处理 Stop、Reset 与回调并发边界。109 收藏 -
Go select 同时有多个 case 可以执行时不会按书写顺序固定选择,而是从可执行通信中做均匀伪随机选择。本文说明求值规则、常见误区,以及如何实现尽力或严格优先级。291 收藏