Go语言技术文章
-
Go 的 archive/zip 可以先读取 ZIP 中央目录,再用 FileHeader 元数据生成文件名索引,不必打开或解压每个条目。本文给出目录扫描、精确查找、目录项识别和资源关闭的完整做法。408 收藏 -
Go 的 strconv.Atoi 不会自动忽略首尾空白。本文说明为什么会解析失败,并给出裁剪后解析、严格拒绝和错误分类的实用写法。408 收藏 -
用 ~ 底层类型约束定义可参与运算的 Go 泛型函数,让 PriceCents、Meters 等自定义数值类型复用 Sum,并理解类型推断和混合参数的边界。408 收藏 -
用一个可运行的 Go 示例拆开 reflect.Value 的 CanSet、CanInterface 和 MethodByName 边界,说明什么时候会 panic,以及如何在反射入口先做类型、有效性和可导出性检查。407 收藏 -
用 testing.TB.Context 把测试生命周期传给子协程,处理取消时机、Cleanup 顺序和 goroutine 退出验收,避免测试结束后仍有后台工作。407 收藏 -
Go TCP 是字节流,不能把一次 Read 当成一条消息。本文用 4 字节大端长度前缀设计帧协议,演示如何用 io.ReadFull 处理半包与粘包、限制最大帧大小,并补齐发送端的部分写入处理。407 收藏 -
fmt.Errorf 用 %v 和 %w 生成的错误文本可以一样,但 %v 会切断错误链,让 errors.Is 和 errors.As 无法继续判断底层错误。本文用一个原创示例说明两者差异,并给出是否公开底层错误的取舍规则。407 收藏 -
使用 Go net/netip.ParseAddr 校验 IPv4、IPv6 和 IPv4-mapped IPv6,再用 Is4In6、Unmap 与 String 输出稳定的规范地址。407 收藏 -
Go Transport 参数调大后延迟不一定下降。本文从 Client 生命周期、空闲连接与并发上限、Response.Body 关闭和可观测信号四个方面排查原因。407 收藏 -
讲清 Go net/http ServeContent 的 modtime 应该从哪里取、为什么不能用 time.Now,以及大文件下载中的 Last-Modified、条件请求和 Seek 边界。407 收藏 -
在 Go 服务中把外部 DTO 隔离在防腐层,能把供应商字段变化挡在接口边界外;本文用订单状态同步示例说明映射、校验、版本兼容与测试验收如何落地。406 收藏 -
用 bytes.Clone 复制 []byte 时,重点不是语法,而是确认结果与原切片不共享可写元素,并验证空输入的 nil 边界。406 收藏 -
用同一份 Go 示例对比 len、utf8.RuneCountInString 和逐 rune 遍历,验证中文、emoji 与非法 UTF-8 的计数差异,并给出按字符截断时不切断编码的方法。406 收藏 -
slices.Clone 对二维切片只做浅拷贝:外层容器独立,但内层切片仍可能共享元素数组。本文用反例说明原因,并给出保留 nil 行语义的逐行深拷贝写法。406 收藏 -
Go 切片的二索引写法可能保留底层数组尾部容量,append 会意外覆盖相邻数据。本文用 full slice expression 限制 cap,说明三索引规则、扩容边界和常见误区。406 收藏