Go问答技术文章
-
Go fitsio 的 File.Close 只释放 FITS 层资源,不会关闭底层 io.Reader 或 io.Writer。本文拆开 os.File、fitsio.File 与 Rows 的责任,给出读取和创建 FITS 文件时的安全关闭写法。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 CrossOriginProtection 与 CORS 同时配置时的职责差异:前者决定非安全跨源请求能否进入业务处理器,后者决定浏览器能否跨源读取响应,并给出共享白名单、中间件顺序和测试矩阵。367 收藏 -
Go huh 动态选项未刷新时,应区分静态 Options、OptionsFunc 闭包和 bindings。通过区域与队列联动示例说明变量地址绑定、缓存、旧选择失配及空状态处理。367 收藏 -
Go go-cmp 比较 nil 切片与非 nil 空切片时默认保留状态差异。本文用最小项目说明 EquateEmpty 的使用方式、Equal 与 Diff 的统一配置,以及不应全局忽略空值差异的业务边界。367 收藏 -
Go 程序在本地、容器和精简系统中出现时区差异时,不要直接依赖 time.Local。本文用 time.LoadLocation、ZONEINFO、time/tzdata 和启动自检建立一套可排查的部署处理方案。367 收藏 -
Go 的 fs.Sub 负责把已有文件系统映射成一个子树视图,但不会主动确认目录已经存在。本文解释错误为何延后到 Open、ReadFile 或 ReadDir 等访问动作,并给出显式检查与封装方式。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 收藏