Go语言技术文章
-
Go 1.27 允许结构体字面量直接使用有效的 promoted field selector 初始化非指针嵌入字段。本文用最小示例说明版本、指针嵌入、字段遮蔽和混用键的边界。491 收藏 -
Go io.SectionReader.Outer 可以取回创建读取窗口时的底层 ReaderAt、起始偏移和长度。本文结合 Read、ReadAt、Seek 与 Size 说明它的职责边界和版本兼容取舍。429 收藏 -
Go 1.27 支持在方法声明中使用类型参数。本文从接收者、调用推导和接口限制三个边界说明 generic method 怎样复用类型参数,并给出适合工程代码的设计方式。393 收藏 -
Go regexp 默认采用 leftmost-first 规则,同一起点有多个候选时不一定选择最长结果。本文用 Regexp.Longest 说明 leftmost-longest 的差异、调用时机、并发边界,并比较它与 CompilePOSIX 的适用场景。444 收藏 -
Go 1.27 的 encoding/json/v2 默认拒绝 JSON 对象中的重复成员名。本文解释拒绝原因、严格解码写法,以及兼容历史数据时如何显式开启 AllowDuplicateNames。383 收藏 -
Go runtime/metrics 的直方图判断应看 Description.Kind,而不是猜测指标名称。本文说明如何从 All 建立描述符索引,安全读取 KindFloat64Histogram,并正确理解 Buckets 与 Counts 的关系。404 收藏 -
Go 的 os.Root 可以把文件访问限制在一个目录树内。本文从 os.OpenRoot 和 Root.Open 的最小写法出发,说明 ..、符号链接、Root.FS 与 OpenInRoot 的边界,避免把路径清理误当成安全限制。486 收藏 -
Go 1.27 可通过 tls.Config.CurvePreferences 显式加入 tls.MLKEM1024;列表是支持集合,不能替代双方能力协商。311 收藏 -
Go netip.Addr.Compare 不是按字符串比较 IP,而是先按地址位数,再按地址内容排序。本文说明混合 IPv4、IPv6、区域 IPv6 和无效零值的顺序,并给出可直接用于 slices.SortFunc 的写法。100 收藏 -
Go 的 os.Rename 只能在满足操作系统条件时直接移动文件。遇到跨文件系统失败,应把复制、同步、目标替换和源文件删除拆开处理。302 收藏 -
Go IPv6 优先连接等待需区分 DNS、双栈回退和请求后续阶段。通过 httptrace 记录连接事件,理解 FallbackDelay 与总拨号预算,并避免把强制 tcp4 当永久修复。364 收藏 -
Go 中 TLS 证书链完整仍提示未知机构,通常是服务端链条与客户端信任根混淆,或 RootCAs 覆盖了系统根池。本文按错误类型说明公共 CA、私有 CA 和自定义 CertPool 的正确处理方式。382 收藏 -
用 http.Transport.RegisterProtocol 把指定 URL scheme 路由到自定义 RoundTripper,并解释 http.ErrSkipAltProtocol 何时交回 Transport 的默认处理路径。256 收藏 -
围绕 Go net/http 的 Response.Body.Close、EOF、Transport 连接池和 HTTP/1.x 复用边界,整理响应体未完全读取时的排查与处理方案。436 收藏 -
Go io.CopyN 短输入通常返回 EOF,而非 ErrUnexpectedEOF。结合已写字节数和原始错误判断失败,理解部分写入、错误包装、重试与资源提交的边界。338 收藏