Go语言技术文章
-
Go maps.Copy 会把来源 map 的键值写入目标 map,同名键由来源覆盖。本文围绕默认配置、文件配置和环境覆盖说明调用顺序、nil 目标与嵌套 map 的浅层边界。162 收藏 -
Go ldflags 注入变量为空时,优先检查包路径、包级 string 变量和最终构建命令。本文用 go list 获取真实 import path,说明 -X 的变量边界、shell 引号和 CI 二次构建覆盖问题。162 收藏 -
围绕 sync.Pool 的临时对象语义,说明 New、Get、Put、Reset 和对象所有权边界,解释为什么 Pool 不能保存业务状态、不能依赖命中率与取出顺序,并给出缓冲区复用与方案选型示例。162 收藏 -
Go 目录读取不能只看 error。os.ReadDir 可能返回已经读到的目录项和错误;os.File.ReadDir 按批次读取时要先处理 entries,再区分 io.EOF 与真正的读取失败。162 收藏 -
从 Go HTTP/2 的连接错误和 HPACK 解码证据出发,区分非法索引、字符串编码、动态表更新与头部大小问题,并给出日志分类和修复边界。162 收藏 -
Go x509 证书链验证通过信任检查后,仍可能被中间 CA 的 NameConstraints 拒绝。本文说明 PermittedDNSDomains、ExcludedDNSDomains、叶子证书 SAN 与 VerifyOptions 的关系,并给出错误定位顺序。162 收藏 -
Go 使用 bufio.Writer 写文件后内容为空,通常不是 os.Create 没有成功,而是数据仍停留在 Writer 的内存缓冲区。本文从实际排障场景出发,说明 Flush、Close、Sync 的职责,给出带错误处理的稳定写法和检查清单。162 收藏 -
在 ARM、386 和 32 位 MIPS 上,直接使用 64 位 atomic 函数时需要由调用方保证地址对齐;atomic.Int64 和 atomic.Uint64 会自动对齐。本文结合结构体布局说明问题原因、改法和发布前检查项。162 收藏 -
Go Starlark 的 Freeze 会递归标记可达值,使集合在发布给并发解释器后不能再通过 API 修改。本文拆开冻结语义、嵌套对象、引用环和实际修复方式。162 收藏 -
用 Go 的 image.Rectangle.Intersect 计算两个图片边界的共同区域,理解半开区间、空矩形、边界相接和 SubImage 裁剪坐标的处理方式。162 收藏 -
用 Go flag.FlagSet.SetOutput 把 usage 和解析错误写入指定日志目标,配合 ContinueOnError、io.MultiWriter 和自定义 Usage 处理多命令行场景。162 收藏 -
用不可变配置快照配合 atomic.Pointer,在并发读多写少的 Go 服务中实现无锁读取和原子热切换。本文覆盖初始化、发布前校验、旧快照保留与竞态测试。162 收藏 -
用 Go 标准库 http.Flusher 实现分片响应刷新,说明能力判断、写入顺序、测试方式,以及包装器和代理缓冲的边界。161 收藏 -
Go 测试套件中,慢测试可以通过 testing.Short 与 t.Skip 在 go test -short 时跳过、完整模式时执行。本文说明标志关系、代码组织、与自定义环境变量的取舍,以及不该交给 -short 解决的边界。161 收藏 -
Go 1.26 新增 crypto/hpke 包后,可以用 KEM、KDF 和 AEAD 组合一次混合公钥加密。本文从密钥生成到 Seal/Open 闭环,说明封装信息、info、AAD 和状态上下文的关系。161 收藏