Go问答技术文章
-
Go regexp 默认采用 leftmost-first 规则,同一起点有多个候选时不一定选择最长结果。本文用 Regexp.Longest 说明 leftmost-longest 的差异、调用时机、并发边界,并比较它与 CompilePOSIX 的适用场景。444 收藏 -
Go 1.27 的 encoding/json/v2 默认拒绝 JSON 对象中的重复成员名。本文解释拒绝原因、严格解码写法,以及兼容历史数据时如何显式开启 AllowDuplicateNames。383 收藏 -
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 收藏 -
夏令时回拨会让同一个本地时钟读数出现两次。本文解释 Go time.Date 为什么不保证选择哪一次,并给出用显式 UTC 偏移消歧、保存和展示时间的实用写法。459 收藏 -
Go bufio.Reader.Peek 的请求长度超过缓冲区时,不会自动扩容,而是返回当前可用字节和 bufio.ErrBufferFull。本文按 n、Reader.Size、Buffered 与错误值拆开说明,并给出先检查固定长度头部、再读取完整内容的处理方式。354 收藏 -
Go math/rand/v2 的 ChaCha8 在同一份 [32]byte 种子和同一调用方式下可以复现原始 Uint64 序列;如果序列不同,优先排查种子字节、实例是否已被消费、Read 与 Uint64 是否交错,以及是否把 Rand 的派生方法误当成固定一步消费。481 收藏 -
Go RawURLEncoding 不接受等号,需按发送方选择 URLEncoding 或无填充配置。本文给出兼容函数、预期样本与基准方法,说明错误处理和适用边界。435 收藏 -
math/big.Int.SetString 解析失败时返回 nil,但接收对象的值是未定义的,可能继续显示旧值。本文解释返回值契约、base 参数和对象复用的安全写法。161 收藏 -
Go encoding/xml 遇到 XML 前缀从 p 变成 ns 后匹配失败时,应比较命名空间 URI 与本地名,而不是比较短前缀。本文用 xml.Name、XMLName 标签、DefaultSpace 和最小回归样例说明排查与修复边界。304 收藏