Go语言技术文章
-
Go sync.Map 并不是所有并发 map 的默认替代品。本文从只写一次多次读取、互不重叠键集合两个官方优化场景出发,结合 LoadOrStore 示例说明它和 map 加 RWMutex 的取舍,以及 Range、类型安全和复制限制。135 收藏 -
Go 升级后 context.Cause 返回值变化,先不要把它当成标准库回归。应按构造函数、首次取消时机、父子 Context 和错误身份四层排查,区分 ctx.Err 的取消状态与 Cause 的具体原因。135 收藏 -
介绍 Go PNG EncoderBufferPool 的适配实现与批量编码接入,提供无池和有池基准示例,解释借还所有权、错误处理及分配下降与内存保留的区别。135 收藏 -
image.NRGBA 保存非预乘8位分量,但 RGBA 方法返回16位预乘值。对照 color.NRGBA、color.RGBA、Set 与 SetNRGBA,解释半透明像素数值变化、原始读取及透明边界。135 收藏 -
用 Go net.IPNet.Contains 判断地址是否落在 IPv4 或 IPv6 子网中,说明 ParseCIDR、地址族、掩码长度和 nil 边界,给出可复用的白名单判断写法。135 收藏 -
Go 的 tls.Config 默认禁止 TLS 重协商。本文从旧客户端兼容场景出发,解释 Renegotiation 的三个取值、TLS 1.2 与 TLS 1.3 的边界,以及如何用握手错误和 ConnectionState 判断拒绝原因。135 收藏 -
os.File.Sync 成功只覆盖当前文件内容提交到 stable storage 的边界,不等于用户态缓冲、目录项和业务 checkpoint 一起持久化。本文用可复用缓冲区、明确 Flush/Sync 顺序和临时文件替换边界说明批处理如何减少额外分配并降低重启后的丢数风险。135 收藏 -
Go 的 json.Decoder 可以从 io.Reader 连续读取多个顶层 JSON 值。本文区分单对象、空白分隔对象流和 JSON 数组,给出 EOF 边界、错误处理与可复用读取函数的设计方式。134 收藏 -
Gin 的 ShouldBind 会消耗请求体,第二次绑定常常只能拿到空内容。本文用 ShouldBindBodyWith 缓存同一份 body,演示两个结构体的绑定写法、错误处理和性能边界。134 收藏 -
Go 项目出现 vendor inconsistent 时,通常是 go.mod、vendor/modules.txt 或 go.work 与 vendor 目录不同步。本文按单模块和 workspace 两种情况给出恢复命令,并解释 replace、显式依赖和 -mod 选择。134 收藏 -
Go runes.Remove 可按字符集合删除命中的 Unicode 码点。本文用 Predicate 删除下划线和中点,说明 UTF-8 输入、字符串返回值、原文留存与展示副本的使用边界。134 收藏 -
使用 golang.org/x/text/encoding/japanese 的 ISO2022JP 解码器读取带转义状态的日文字节流,覆盖一次性转换、流式读取、截断边界与重新编码。134 收藏 -
Go fmt.Errorf 多个 %w 可保留多个错误原因。结合处理与清理失败场景说明 nil 组合、错误树、errors.Unwrap 的限制,以及分类与兼容性取舍。134 收藏 -
Go 的默认 JSON 解码会忽略结构体没有声明的字段。本文用 DisallowUnknownFields 让未知字段直接返回错误,并说明错误处理、兼容期和嵌套结构的边界。134 收藏 -
Zap 默认按时间窗口内的日志等级和消息进行采样分组,request_id、用户和延迟等字段只是上下文。本文解释这种设计如何避免高基数字段打散采样,并说明 first、thereafter 与独立 Core 的使用边界。134 收藏