Go语言技术文章
-
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 append 是否改到原切片,关键看两个切片是否共享底层数组以及剩余容量。本文用 len、cap、三索引切片和 slices.Clone 给出判断与隔离方法。407 收藏 -
Go 的 maphash.Comparable 可以为满足 comparable 约束的值生成与 == 一致的进程内哈希。本文说明 Seed、碰撞处理和 ComparableHasher 的使用边界。407 收藏 -
Go archive/zip 的 CRC 错误通常在条目完整读取到结尾时暴露,而不是在 File.Open 或 ReadCloser.Close 时返回。本文用 io.Copy、zip.ErrChecksum 和双层资源关闭说明如何准确识别损坏压缩条目。407 收藏 -
Go 中需要把 []byte 交给异步任务、缓存或跨层接口时,bytes.Clone 可以复制有效数据并隔离底层数组。本文比较旧写法与新写法,并说明 nil、空切片、容量和回归测试的边界。407 收藏 -
Go time.Timer 的重置写法取决于通道语义:Go 1.23 及以后可直接 Reset,旧版则应先 Stop,并在返回 false 时用非阻塞接收排空潜在旧值。本文还说明 go.mod、GODEBUG、单一拥有者和 AfterFunc 的边界。407 收藏 -
Go x/text/number 中 MinFractionDigits 控制小数位下限,MaxFractionDigits 控制上限。本文按排障手册说明两者何时配套、何时只设一侧,以及 Scale 固定精度的选择。407 收藏 -
介绍 Go iter.Seq 对同步回调接口的适配方式,说明 yield 返回 false 的停止契约、Seq2 错误传递约定,以及资源释放、重复遍历和取消的边界。407 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · HTTP · Cookie · Go问答 · Go HTTP请求头 http.Cookie Cookie.String Cookie.Valid
Go http.Cookie 出现空结果时,先区分 String 返回空字符串、Valid 返回错误和 Request.Cookies 返回空切片,再检查 nil、Name、请求头格式与 Cookie 数量边界。407 收藏 -
用一个只读标签集合实现 Go iter.Seq 范围迭代器,说明空输入、构造错误、提前退出与重复遍历的接口约定,给出带中文注释的完整示例。407 收藏 -
pkg.go.dev API 返回多个版本时,先用 versions 接口读取候选,再按完整语义版本、主版本前缀或 master/main 选择目标,最后通过 version 参数查询包文档。本文还说明伪版本、分页 token 和模块路径歧义的处理边界。407 收藏 -
Go 构建缓存命中只说明某个构建动作的输入指纹匹配,不代表最终二进制字节必然相同。本文从编译与链接分层、GODEBUG 缓存诊断、ldflags/buildid/trimpath、cgo 外部库和 CI 固定条件几个方面说明排查顺序。407 收藏