Go语言技术文章
-
Go 按字节截断可能拆开 UTF-8 编码。本文比较完整字节前缀与 rune 前缀,提供严格输入的原创函数,并说明替换字符、流式尾部和字素簇的判断边界。348 收藏 -
Go 1.27 的 encoding/json/v2 默认拒绝 JSON 对象中的重复名称。本文用一个可复用的小函数说明如何识别重复键错误,以及何时显式使用 jsontext.AllowDuplicateNames(true) 兼容旧协议。348 收藏 -
通过 go/types.Info.Types 读取 TypeAndValue.HasOk,区分 map 索引、类型断言、channel 接收与普通表达式的 comma-ok 边界。348 收藏 -
用 Go 1.22 之后的 net/http ServeMux 方法模式注册 GET、POST 路由,说明 HEAD 特例、405 响应、匹配优先级和版本兼容边界。347 收藏 -
用 Go strings.LastIndexByte 定位最后一个 ASCII 路径分隔符,拆出父路径和末段,处理未找到、根路径、末尾分隔符、UTF-8 字节偏移和多种分隔符的 API 选择。347 收藏 -
Go atomic.Pointer 的 Load 读到 nil,通常不是原子操作失效,而是对象尚未 Store、代码显式发布了 nil,或读取时机早于初始化发布。本文用最小示例和轻量指标拆开这些边界,并补充复制 atomic.Pointer 的风险。347 收藏 -
介绍 Go unicode/utf8.AppendRune 的函数契约、已有 []byte 缓冲区追加方式、返回切片要求和非法 Rune 替换为 utf8.RuneError 的处理边界。347 收藏 -
Go netlink 中,Execute 是 Send、Receive 和 Validate 的请求-回复封装;拆成 Send 加 Receive 后,可以在收发之间设置边界、读取已填充的消息头或自行决定校验时机。本文用原创代码和静态结构图说明两种写法的职责、multipart 回复、错误处理与选择场景。347 收藏 -
Go 升级后 encoding/json.Decoder 的结果或错误发生变化时,不要先修改业务逻辑。本文按工具链、实现、Decoder 配置、输入字节和目标类型五层建立最小复现矩阵,说明如何区分真实语义差异与错误文本变化。347 收藏 -
Go time.DateOnly 代表 2006-01-02,可以同时用于 Time.Format 和 time.Parse,让日期字段统一输出与读取 YYYY-MM-DD。本文说明格式化、解析、错误处理、时区边界和日期类型封装。347 收藏 -
comment.Printer 的 TextWidth 只约束 Text 方法生成的纯文本行宽,不参与 HTML 的块级渲染。本文从 Printer 的输出分支解释原因,并给出同一份 Doc 如何分别输出 Text、Markdown 和 HTML 的配置建议。347 收藏 -
Go binary.Uvarint 返回 n=0 不是解出了数字 0,而是当前缓冲区还不够完整;n<0 则表示溢出。本文从分片输入场景出发,给出三种返回值的判断、游标推进、尾部保留和 ReadUvarint 选择方法。346 收藏 -
Go 的 netip.ParseAddr 不只解析普通 IPv4 和 IPv6,也能保留带作用域 zone 的 IPv6 地址。本文说明带百分号的地址如何解析、怎样读取 Zone、如何避免把端口误传给 ParseAddr。346 收藏 -
解释 Go x/text/secure/precis 中昵称强制规范化、比较键和等价比较的区别,给出处理 Unicode 昵称冲突的实用写法。346 收藏 -
用 Gonum mat.SVD 分解矩阵,读取降序奇异值,并通过 rcond × 最大奇异值的相对阈值估计有效矩阵秩,同时说明分解失败、尺度变化与后续求解的边界。346 收藏