Go语言技术文章
-
Go io.CopyBuffer 的缓冲区不是越大越快。本文从 WriterTo/ReaderFrom 复制路径、32 KiB 基线、并发内存预算和错误边界出发,说明如何选择 32、64 或 128 KiB,并给出可复用的文件复制示例。313 收藏 -
使用 Go net/url 生成签名查询串时,统一 Values.Encode、参数排序、重复键策略和 RawQuery,避免空格、加号与二次编码造成验签不一致。313 收藏 -
讲清 Go GODEBUG gocacheverify 如何绕过缓存命中、重建并比较旧新输出,配合 gocachehash、go clean -cache 和 -a 排查构建缓存一致性。313 收藏 -
多个 goroutine 同时查询时,如何只接收一个可用结果并让其余任务及时退出?本文用一个可复现的 Go 示例拆开 select 竞争、取消信号和结果通道关闭顺序。312 收藏 -
Go 的 regexp.FindStringSubmatchIndex 返回的是字节下标,不是字符位置。本文用带中文的日志片段说明如何读取捕获组、处理未匹配分组,并避免切片越界。312 收藏 -
Go 的 bytes.Buffer.AvailableBuffer 返回可借用的尾部空间,但它不是已经写入的数据。本文用最小程序说明 Bytes、AvailableBuffer、Write 与 Reset 的边界,避免把缓冲容量误当成有效长度。312 收藏 -
用 Go archive/tar.Reader.Next 遍历带 PAX 扩展的 tar 包时,扩展头不会作为普通文件交给业务层。本文说明如何读取真实 Header、处理当前文件剩余数据,并区分 io.EOF 与 ErrInsecurePath。312 收藏 -
发布 Go 模块时,不能只检查 vendor 目录是否存在。通过重新生成 vendor、对照 vendor/modules.txt 和强制 -mod=vendor 构建,可以及时发现依赖版本漂移。312 收藏 -
多个 goroutine 共用一个 channel 时,不要让任意发送方直接关闭它。本文用 WaitGroup 统一等待发送方,用协调者关闭数据 channel,并用 done 处理接收方提前退出,避免 send on closed channel 和发送 goroutine 泄漏。312 收藏 -
Go 的 math/big.Rat 用任意精度分子和分母保存有理数,适合金额比例、配额和分数计算。本文说明如何创建、解析、运算和格式化 Rat,并划清与 float64 及浮点输出的边界。312 收藏 -
用 Go 的 encoding/xml 流式读取 XML 时,EndElement 不是靠字符串猜测匹配。本文用 xml.Name 栈解释嵌套结束标签、自闭合标签、命名空间和 io.EOF 的判断方式。312 收藏 -
用 Go 的 http.ServeContent 处理 Range 请求,关键是传入支持 Seek 的 io.ReadSeeker,并通过 206、Content-Range、Content-Length 和 416 判断区间是否读取正确。312 收藏 -
围绕 Go os/exec 的 StdoutPipe 说明 Start、读取、Wait 的正确顺序,并区分输出读取错误、退出错误与 stderr 诊断信息。312 收藏 -
Go gzip.Reader 默认会连续解压拼接成员。本文用 Multistream(false)、bufio.Reader 和 Reset 逐段取得每个成员的 Header 与正文,并加入单成员大小限制、错误处理和安全落盘边界。312 收藏 -
Golang · Go问答 | 1个月前 | 并发 · 故障排查 · Go问答 · encoding/json · encoding/json atomic.Value Go配置热加载 Decoder 配置复用 旧值残留
Go 服务热加载 JSON 配置时,偶发读到旧值通常不是文件没有更新,而是解码目标被复用、缺失字段没有覆盖旧内容,或读写过程没有通过不可变快照切换。本文从一次线上故障切入,给出可复现证据、修复代码和回归检查。311 收藏