Go问答技术文章
-
Go context deadline 到期不会强制杀掉后台 goroutine。本文用 Done、Err、可取消阻塞点和 WaitGroup 拆解不退出原因,并给出安全的协作式退出写法。368 收藏 -
Golang · Go问答 | 3星期前 | 依赖管理 · go · module · go mod download Go module retract Go 模块撤回 Go 依赖版本缓存 go list -retracted
Go module 的 retract 只改变自动版本选择,不会把已发布版本从代理或本地缓存抹掉。本文用 go list、go mod download 和 GOMODCACHE 排查撤回版本仍能下载的原因,并给出升级、保留和清理三种处理边界。368 收藏 -
encoding/csv.Reader 遇到列数不固定的 CSV 时,应把 FieldsPerRecord 设为负数关闭列数校验,再在业务层按字段长度和列名做校验。本文比较 0、正数和负数三种设置,给出可复现的读取与验收方法。367 收藏 -
context.WithCancel 的 cancel 不只是结束信号,也负责解除父子 context 关联。本文用 Go 代码说明不调用 cancel 时的泄漏边界、正确写法和排查清单。367 收藏 -
Go 的 sync.RWMutex 会让已持有的读者先完成,写者等待后阻止新的读者进入,从而避免写操作长期饥饿。367 收藏 -
Go 模板调用自定义函数时,FuncMap 必须先于 Parse 注册。本文用最小示例解释解析期名称检查、执行期函数替换和常见排错边界。367 收藏 -
Go 1.21 起,主模块 go.mod 的 go 行不能低于依赖模块的 go 行。本文区分自动工具链切换、直接失败与依赖回退,给出 go.mod、GOTOOLCHAIN 和 go.work 的排查与修复清单。367 收藏 -
Go测试需要临时文件时,直接使用testing.T.TempDir创建测试专属目录,测试及子测试结束后自动清理。本文给出文件读写、子测试隔离、GOTMPDIR与资源关闭的实用边界。367 收藏 -
普通测试单线程运行正常,并不代表 Go 程序没有数据竞争。本文用共享计数器说明调度差异,演示 go test -race 的最小复现、报告定位和原子操作、互斥锁的修复边界。366 收藏 -
Go 报 sync: negative WaitGroup counter,通常不是 Wait 本身出错,而是某条执行路径让 Done 多于已完成的 Add。本文从计数关系、defer 作用域、错误分支和 helper 责任四个位置定位多余的 Done,并给出可复用的修复写法。366 收藏 -
Go time.Time 经过 JSON 序列化后,变化的通常是 Location 名称或夏令时规则,而不是时间瞬时点。本文拆解 RFC3339、偏移量和位置恢复的边界。366 收藏 -
Go os.OpenFile 的 perm 不是最终权限。本文用 umask、stat、UID/GID 和挂载状态拆解容器中权限看似失效的原因,并给出最小权限修复方法。366 收藏 -
解释 bytes.Buffer 的 Available、Len、Cap 与 Grow 如何配合,给出可验证的追加空间判断,以及 AvailableBuffer 的使用边界。365 收藏 -
Go 的 slog.LevelVar 适合把日志级别做成可热更新的开关。本文从 Handler 如何读取级别讲起,给出并发修改、配置回滚和测试验证的最小写法。364 收藏 -
Go 用 IP 连接 HTTPS 时,TCP 地址、TLS ServerName、SNI 和证书 SAN 不是同一个概念。本文解释证书域名不匹配的原因,并给出保留校验的安全写法。364 收藏