Go语言技术文章
-
用一个可运行的小例子说明 netip.Addr 为什么能直接做 map 键,并拆开零值、IPv4 映射和 net.IP 迁移时最容易踩到的边界。275 收藏 -
Go 代码里 errors.As 返回 false,往往不是错误没有包装,而是目标变量的类型和自定义错误的实际形态没有对上。本文用一个订单校验错误的例子,拆开值接收者、指针接收者、目标指针层级和错误链验证,帮助你快速定位匹配失败。237 收藏 -
Go 1.26 新增 crypto/hpke,提供符合 RFC 9180 的混合公钥加密接口。本文用一个最小消息交换示例拆开封装、解封装、上下文信息和密钥用途边界,并说明如何验证密文不可直接当作明文使用。435 收藏 -
Go 接口如果只返回一段错误字符串,调用方很难判断应该重试、提示用户还是修复参数。本文从订单查询接口的真实场景出发,设计可演进的结构化错误、参数语义、错误映射和兼容策略。413 收藏 -
Go HTTP 服务调用 Shutdown 后仍可能丢请求,关键不在一个函数是否返回,而在新连接、活跃连接、Keep-Alive 连接和超时窗口是否被分别处理。本文用一个可复现的停机流程拆开这些边界。343 收藏 -
Go 1.23 引入的 unique 包可以把重复值映射到可比较的 Handle,但它不是无上限缓存。本文用字符串标签场景说明 unique.Make 的比较方式、Handle 生命周期和不适合使用的业务边界。471 收藏 -
Go 的 io/fs.ReadDir 会按文件名排序返回目录项,但底层 ReadDirFile、os.File.ReadDir 和错误场景的行为并不完全一样。本文从一次目录索引顺序错乱的排查开始,拆清排序、部分结果和测试边界。253 收藏 -
Go 泛型函数返回切片时,真正容易踩坑的不是类型参数,而是多个切片是否共享底层数组。本文用 append、cap 和复制策略拆开容量边界,并给出可验证的安全写法。300 收藏 -
用 Go archive/tar 读取压缩包时,先做本地路径判断,再限制输出根目录并拒绝链接条目,最后用越界和覆盖测试验收解包逻辑。341 收藏 -
Golang · Go教程 | 1个月前 | 标准库 · 泛型 · 资源管理 · 迭代器 · Go教程 · 资源释放 iter.Seq range over function Go泛型迭代器 iter.Pull
Go 1.23 引入的 iter.Seq 让自定义序列可以直接配合 for range,但提前 break 与 iter.Pull 的 stop 处理决定了资源能否及时释放。本文用分页读取与筛选场景拆解 push 迭代器、pull 迭代器和停止边界。495 收藏 -
context.WithValue 适合传递贯穿请求链的元数据,不适合替代函数参数或承载业务配置。本文用键类型、取值失败和测试隔离三个边界,说明什么时候该用、什么时候该拆出显式参数。107 收藏 -
Go 标准库的一次性双返回值初始化模式,适合把值和错误一起缓存,并让并发调用者共享同一份结果。本文从配置加载与文件读取场景出发,说明它的执行次数、错误传播、panic 行为和不适用边界。156 收藏 -
Go 里两个 time.Time 看起来显示相同,直接用 == 仍可能比较出不同结果。本文从单调时钟、Location 和时间精度三个边界说明 Equal 与 == 的区别,并给出可验证的比较写法。276 收藏 -
用 Go 标准库的一次性初始化函数封装懒加载配置,验证成功值、初始化错误与 panic 缓存语义,避免并发请求重复初始化。453 收藏 -
Go 泛型函数一旦把参数收窄成 any,就会失去编译期可用的类型信息。本文从一个可复用的过滤函数出发,对比 any、类型断言和泛型约束的边界,并给出选择建议。173 收藏