Go语言技术文章
-
Go 的 weak.Pointer 不会阻止对象回收,但 finalizer 会临时复活对象。本文说明旧弱指针为何在 finalizer 排队时失效,以及如何通过禁止强引用逃逸、改用 runtime.AddCleanup、按缓存未命中重建对象来消除复活风险。483 收藏 -
Golang · Go问答 | 4星期前 | go语言 · 接口设计 · Go问答 · 兼容性 · encoding/json 接口兼容 DisallowUnknownFields RawMessage Go JSON 未知字段
Go 的 JSON 接口如果既要兼容带新增字段的旧客户端,又要知道协议发生了什么变化,可以先正常解码结构体,再用 map[string]json.RawMessage 读取字段名并比较白名单,最后将未知字段作为可审计告警,而不是直接拒绝请求。482 收藏 -
Go 中用 os.OpenFile 创建唯一文件时,O_EXCL 必须和 O_CREATE 一起使用。本文给出错误判断、关闭处理与并发验收指标,避免已有文件被覆盖或截断。482 收藏 -
用 Go hash.Hash 和固定缓冲区流式计算文件摘要,覆盖部分读取、EOF、真实 I/O 错误、资源关闭与摘要输出边界。482 收藏 -
在文件节点返回 fs.SkipDir 会跳过父目录剩余条目,fs.SkipAll 则停止整棵树。本文用对照表和代码说明安全选择边界。482 收藏 -
Golang · Go教程 | 3天前 | 标准库 · 配置管理 · 错误处理 · 并发编程 · Go教程 · Go 并发初始化 共享配置 sync.OnceValue sync.OnceValues
Go 1.21+ 可用 sync.OnceValues 把共享配置与初始化错误作为一对结果缓存,避免 sync.Once 配合外部变量造成分散状态。本文通过可测试的 ConfigProvider 展示并发只加载一次、错误传播及不适合自动重试的边界。482 收藏 -
Go 用 context.WithValue 传 trace id 时,key 不要直接用 string;用包内私有类型配合类型化存取函数,既能避免跨包碰撞,也能限制值只服务于请求链路。481 收藏 -
Go archive/zip 的 Writer.Close 负责写入 ZIP 中央目录,忽略其错误可能把半成品当成成功文件。本文用分层错误处理和临时文件发布说明可靠写法。481 收藏 -
fmt.Errorf 用 %w 包装自定义错误后,调用方可通过 errors.As 找回具体类型;本文解释值接收者、指针接收者、%v 与目标指针的对应关系。481 收藏 -
Go 遍历 tar 归档时,不要只看文件名后缀,而应读取 tar.Header.Typeflag。本文用一套最小遍历代码说明如何识别目录、符号链接和硬链接,并处理 Linkname、Read、io.EOF 及路径安全边界。481 收藏 -
用 Go t.Cleanup 把资源创建与释放登记绑定起来,理解后进先出、父子测试生命周期、提前失败和清理错误记录的实现边界。481 收藏 -
高频循环里反复调用time.After会让计时器无法主动取消。本文用可复用的time.NewTimer演示Stop、排空、Reset和退出清理,并说明Go 1.23前后的Timer语义差异。481 收藏 -
Go net.Resolver 的自定义超时要分成两层:调用 LookupIPAddr 时用 context.WithTimeout 限制整次解析,Resolver.Dial 内部再用 net.Dialer.DialContext 约束连接 DNS 服务的时间。本文给出可复用代码,并说明 PreferGo、StrictErrors、UDP/TCP 与错误判断边界。481 收藏 -
pkg.go.dev API 的 latest 代表索引已识别的最新模块版本,不等于仓库默认分支或任意 Git 标签。本文从语义化标签、子模块前缀、主版本路径和索引传播四层排查差异,并给出最小验证命令。481 收藏 -
Go 类型断言遇到 nil interface 或 typed nil 时,comma-ok 与单值断言的行为并不相同。本文用原创示例解释失败、零值和 panic 的边界。480 收藏