Go语言技术文章
-
用 Go 处理连续 JSON 流时,Decoder.Token、Decode 和 Buffered 的边界很容易被误读。本文从两个 JSON 连在一起的现场出发,验证读取位置、解释看似吞值的原因,并给出可复查的多对象解析写法。435 收藏 -
bytes.Reader.Seek 的负位置不是普通读取失败,而是偏移计算越过了起点。本文用可运行示例拆开 whence、offset、返回位置和错误处理边界,并说明为什么不能继续读取。435 收藏 -
用 Go 的 sync/atomic.Value 保存同一具体类型的只读配置快照,写入方复制后整体替换,读者通过 Load 无锁读取,并避开共享 map、类型漂移和并发写入等常见坑。435 收藏 -
解释 Go 表驱动并行测试为什么会读到同一个循环变量,给出 tc := tc 的兼容写法,并区分 Go 1.22 语义、浅复制和共享资源问题。435 收藏 -
Go 使用 bufio.Writer 写文件时,Flush 成功并不等于关闭顺序正确。本文用最小示例拆开 Write、Flush、Close 三个阶段,定位空文件、defer 逆序和错误被覆盖等常见问题。435 收藏 -
Go archive/zip 的 Writer.Create 遇到同名路径不会覆盖,而会追加重复条目。本文用路径规范化、seen map 和待写集合,分别实现拒绝重复与最后一份生效两种方案。435 收藏 -
Go url.URL 的 Opaque 用于表示 scheme:opaque 形式的非层级 URI。本文对比 mailto、urn、data 与普通 HTTP 地址,说明字段读取、直接构造和误用边界。435 收藏 -
区分 Go 字符串的字节偏移、rune 数量和用户感知字符,给出按 rune 边界与按字节预算安全截断的修复写法。435 收藏 -
通过长度前缀 JSON 示例说明 Go rpc.Server.ServeCodec 如何接入自定义 ServerCodec,并梳理拆帧、并发写响应与关闭连接的边界。435 收藏 -
Go 服务里用 time.Ticker 做周期任务时,真正容易出问题的不是 tick 间隔,而是任务退出后计时器、goroutine 和下游资源没有一起收尾。本文用可复现的长期任务场景拆解 Stop 的边界、退出信号和复查方法。434 收藏 -
Go 定时任务最容易被忽略的问题不是如何触发,而是上一次任务变慢后如何避免下一轮重入。本文比较 Ticker、单次触发和带状态的调度写法,并给出可验证的选型边界。434 收藏 -
Go 1.25 新增的 sync.WaitGroup.Go 把 goroutine 启动与计数绑定起来。本文用批量任务示例讲清启动时序、Wait 边界、panic 约束和异常收口方式。434 收藏 -
Go 正则表达式可以用 (?P...) 声明命名捕获组,再通过 FindStringSubmatch 和 SubexpIndex 按字段名读取结果。本文说明数字分组的错位风险、命名分组写法,以及 nil、空分组和名称不存在时的处理方式。 434 收藏 -
Go 的 int 字段不能直接接收 JSON 字符串中的数字。固定返回 "123" 时使用 json:",string",同时兼容数字和字符串时用自定义 UnmarshalJSON 配合 strconv.ParseInt,并明确空值、小数和溢出策略。434 收藏 -
Go 的 panic 沿当前 goroutine 调用栈展开,recover 只有在同一 goroutine 的 deferred 函数中直接调用才会生效。本文用原创示例说明错误位置、保护函数和 channel 传递边界。434 收藏