Go语言技术文章
-
binary.Varint 的第二个返回值小于零表示 64 位溢出,绝对值是已读取字节数。本文拆解三态返回、缓冲区推进、ReadVarint 选择与边界测试。187 收藏 -
Go 1.20 引入的 http.ResponseController 把 Flush、Hijack、读写超时和全双工读取统一到一个控制入口。本文用最小示例说明它如何工作、何时返回 ErrNotSupported,以及接管连接后必须承担哪些清理责任。186 收藏 -
用 Go reflect 读取结构体字段标签时,先统一处理指针与结构体类型,再结合 StructField.Tag 的 Get 或 Lookup 读取标签,并正确拆分 json 等逗号选项。186 收藏 -
用 go.work 组织多个本地 Go 模块,说明工作区 replace 的覆盖关系,并给出 GOWORK、go list 与发布前收拢配置的检查方法。186 收藏 -
Go x509.Certificate.VerifyHostname 忽略旧版 Common Name,是因为主机名校验应使用证书的 SAN。本文区分 DNS SAN、IP SAN 与证书链校验,并给出迁移和排查清单。186 收藏 -
Go 的 time.Ticker 适合固定节拍触发工作,但当一次任务比 tick 间隔更长时,调度、积压和取消边界很容易混在一起。本文用一个定时刷新任务说明 Stop 与 Reset 的正确位置,并给出带背压、可退出、可观测的写法。185 收藏 -
用一个并发加载配置的例子拆开 Go 一次性多值初始化:为什么结果和错误会一起缓存,如何验证只初始化一次,以及何时应该换成可重试的方案。185 收藏 -
Go 1.24 默认支持泛型类型别名。本文从跨包迁移一个泛型类型的实际场景出发,说明别名与定义类型的语义差异、Go 1.23 实验开关的边界,以及如何用编译、测试和工具链检查完成迁移验收。185 收藏 -
用同一份 PNG 输入验证 image/png.DecodeConfig 的尺寸读取、Reader 消费位置和 Decode 配合方式,解释 bytes.Reader、Seek 与不可回退流之间的边界。185 收藏 -
Go 1.27 将 unicode 包及相关支持从 Unicode 15 升到 Unicode 17。本文用 RangeTable、IsLetter、IsDigit 和 UTF-8 校验拆开说明升级后业务字符规则的回归边界。185 收藏 -
Go 的 for range channel 一直等待不退,通常与未关闭、nil channel、发送端阻塞或关闭责任混乱有关。本文用最小示例说明排查和修复方法。185 收藏 -
围绕 Go http.Transport 说明 IdleConnTimeout、MaxIdleConns 和 MaxIdleConnsPerHost 的作用,区分客户端空闲回收与服务端主动关闭,并给出可复用 Transport 的配置示例和排查清单。185 收藏 -
Go 客户端明明复用了同一个 http.Transport,却不断新建 TCP 连接,常见原因不是连接池失效,而是响应体没有读完并关闭、每个请求重复创建 Transport,或空闲连接参数与并发量不匹配。本文用可观察的请求流程拆开判断方法。184 收藏 -
reflect.TypeFor[T]() 从 Go 1.22 开始直接返回泛型类型 T 对应的 reflect.Type。本文对比旧的 reflect.TypeOf((*T)(nil)).Elem(),说明接口类型、指针类型、类型缓存和 Go 版本兼容边界,给出可运行的类型判断示例。184 收藏 -
strings.FieldsFunc 适合按字符规则切分文本,但它会合并连续分隔符并丢弃空字段。本文用配置行解析场景说明它的边界,并给出保留空字段的自定义写法。184 收藏