Go语言技术文章
-
Go Timer Reset 的安全写法取决于 Go 版本和计时器状态。本文围绕 Stop、Drain 与 Reset 的先后关系,说明 Go 1.22 及更早版本的兼容处理、Go 1.23 之后的语义变化,以及通道型 Timer 与 AfterFunc 的不同边界。170 收藏 -
Go atomic.Value 的核心约束是同一个 Value 只能保存同一具体类型。本文从类型断言失败和 Store 冲突两个现象入手,给出配置快照、统一读取、copy-on-write 更新与并发边界检查的写法。316 收藏 -
Go sync.Pool.Get 取到 nil 并不一定是异常,空池、运行时丢弃对象和未配置 New 都可能触发该分支。本文说明如何用 New 集中创建责任、处理类型断言、清理状态并判断对象是否适合放入 Pool。479 收藏 -
Go 结构体包含 Mutex 时,值接收者、按值参数与容器操作都可能复制锁。本文通过计数器说明指针传递、容器存指针、noCopy 的作用以及并发计数的判断方法。146 收藏 -
Golang · Go问答 | 4天前 | 闭包 · go · 垃圾回收 · Go问答 · Go 生命周期 垃圾回收 keepalive Stop runtime.AddCleanup 清理函数 对象捕获
Go runtime.AddCleanup 的 cleanup 和 arg 不能反向持有 ptr,否则目标对象不会变成可回收状态;本文用参数化清理、KeepAlive、Stop 和并发边界说明如何安全设计清理函数。237 收藏 -
Go 里传入 0644 却得到不同权限,通常要同时检查创建时的 umask 和文件是否已经存在。本文给出一套可复用的判断顺序与修正代码。419 收藏 -
Go HTTP 客户端连接没有按预期复用时,重点检查 Response.Body 是否关闭、是否读到 EOF,以及读取上限是否符合业务边界。本文按响应体大小给出可落地的处理方式。372 收藏 -
通过 os.Getwd 与 filepath.Abs 定位 Go 相对路径的解析基点,为外部配置提供显式绝对路径参数,并用 embed 管理随版本发布的只读模板,说明跨工作目录启动时的判断与错误处理。255 收藏 -
io.ReadAll 会把输入一直读到 EOF 并返回完整字节切片。本文按是否需要完整内容、能否设置大小上限和是否可以边读边处理,给出 LimitReader、固定缓冲区与 io.CopyBuffer 的选择方法。471 收藏 -
整理 Go encoding/json v1、encoding/json/v2 对 JSON 重复字段的默认处理差异,说明严格拒绝、旧接口兼容和 DisallowUnknownFields 的边界。499 收藏 -
Go bufio.Scanner 默认按行返回文本,空行会返回空字符串。本文用一个可复用的段落聚合流程处理普通行、连续空行、EOF 和读取错误,并说明严格空行与空白行的区别。392 收藏 -
为 Go 接口时间建立独立 JSON 适配类型,给出 UTC 整秒字符串的双向编码完整示例,明确 null、空字符串、精度检查和错误处理,并说明字段缺失与方法递归的常见问题。348 收藏 -
Go JSON 解码到 interface{} 时数字默认会变成 float64。本文比较明确目标类型、UseNumber 和展示型字符串三种选择,帮助你避免大整数精度丢失。477 收藏 -
Go map 的遍历顺序没有语言保证。本文用键收集、sort.Strings 和多字段比较器,把 map 数据转换成可复现的日志、接口和报表结果。311 收藏 -
Go 使用 encoding/json 时字段为空,通常要按导出字段、struct tag 拼写和 Unmarshal 目标指针三个方向排查。本文用最小示例说明每种现象的原因与修复方式。206 收藏