Go语言技术文章
-
Go reflect.Value.MethodByName 找不到方法时会返回零 Value,不能直接 Call。本文说明 IsValid 判断、导出方法与大小写、值接收者和指针接收者差异,以及反射调用前的签名检查。236 收藏 -
Go flag.FlagSet 的空结果通常不是没有解析,而是输入没有位置参数、flag 仍使用默认值,或解析在第一个非 flag 参数处停止。本文用最小示例拆开 Parse、NArg、Args、Arg 和 Parsed 的边界。236 收藏 -
Go 的 tls.ConnectionState.NegotiatedProtocol 为空,不一定表示 TLS 握手失败,可能是没有配置 ALPN、对端没有启用 ALPN,或读取时机早于握手完成。本文按值班排障顺序说明 NextProtos、HandshakeComplete、协商结果和回滚边界。235 收藏 -
SystemCertPool错误应先区分系统根加载、补充PEM读取解析与TLS验证阶段。文章给出保留错误链的封装,说明权限和路径分类的边界,以及平台、环境变量和缓存差异。234 收藏 -
Go container/heap 修改优先队列元素后,不需要先 Remove 再 Push。维护 Item.index,在修改 priority 后调用 heap.Fix,就能以 O(log n) 恢复堆序;本文同时说明 Swap、出队和失效索引的边界。234 收藏 -
go/types.Alias 的 TypeParams 用来读取泛型别名声明参数,TypeArgs 用来读取具体实例实参。本文通过类型检查结果说明两者的区别、Origin 的归并用途、nil 边界以及 Alias 与 Named 的选择规则。233 收藏 -
用完整包路径、类型和方法定向查询 Go 文档,按需使用 -src 查看实现,并用 go list 查找本地源码目录,区分符号查询、展示选项与文件位置。230 收藏 -
Go compress/flate.Writer 没有可直接填写的公开字段,可选行为要通过 NewWriter、NewWriterDict 的参数以及 Write、Flush、Close、Reset 的生命周期来表达。本文区分压缩级别、预置字典、流式刷新和 Writer 复用的职责,并给出错误处理与配置封装示例。229 收藏 -
用 Go select 同时等待两个输入 channel,讲清接收分支、value 与 ok 的关闭判断、两路输入汇总,以及 default 和阻塞等待的适用边界。228 收藏 -
说明 Go archive/tar.Writer 如何从 fs.FileInfo 生成 Header,保留文件模式与 ModTime,并在需要时用 FormatPAX 保存更细的时间信息。228 收藏 -
Go time.Time 不会保存解析错误,time.Parse 返回的 error 需要与时间值分开处理。本文用 (time.Time, error)、%w 和 errors.As 说明如何保留 ParseError、添加业务上下文,并区分零值、时区与序列化边界。228 收藏 -
Go net.ListenConfig.MultipathTCP 和 SetMultipathTCP 怎样控制监听器是否使用 MPTCP,本文说明开关优先级、TCP 回退边界与最小代码写法。228 收藏 -
Go token.File.MergeLine 只合并内存中的行偏移表,不会改写源码字节。本文用最小示例说明行号范围、Lines 变化、Position 换算和非法行号 panic 边界。227 收藏 -
Go container/ring 的 Unlink 从当前节点之后摘除连续节点,并返回独立子环。用六节点示例说明数量取模、锚点选择、剩余长度与返回值别名,以及严格数量包装方式。226 收藏 -
Go 字符串出现非法 UTF-8 后,如何用 ToValidUTF8 按连续片段替换、保留合法 U+FFFD,并约束替换字符串和原始数据保留策略。226 收藏