Go语言技术文章
-
使用 go/types 检查 int 与 ~int 等重叠联合约束时,Config.Check 负责返回首个错误,Config.Error 可收集每条诊断,Union.Len、Term 与 Terms 则只负责读取已形成的联合结构。466 收藏 -
用 Go 的 image/gif.EncodeAll 组织多帧 GIF:把输入转换为统一调色板的 Paletted,按帧对齐 Delay 和 Disposal,并处理 LoopCount、Config 以及文件关闭错误。466 收藏 -
Go 的 io.ByteScanner 把 ReadByte 和 UnreadByte 组合成了一个很窄但实用的回退接口。本文用 bufio.Reader 拆出 token,遇到分隔符时只退回一个字节交给下一个解析阶段,并说明 Read、ReadRune、连续 UnreadByte 等调用为什么不满足这个契约。466 收藏 -
Go url.Parse 会把路径保存为解码后的 Path,原始的 %2F 等编码可能只保留在 RawPath 提示中。本文用 EscapedPath 说明如何稳定输出有效的原始路径编码,并处理提示失效的边界。465 收藏 -
用 Go 标准库 net/mail.ParseAddressList 解析多个收件人,分别读取 Name 与 Address,并用数量、字段和错误三个指标判断地址列表是否可继续进入业务流程。465 收藏 -
Golang · Go教程 | 2星期前 | goroutine · pprof · Go教程 · 运行时 · Go pprof 性能诊断 goroutine profile pprof.Lookup
Go 里可以通过 pprof.Lookup("goroutine") 获取运行时内置的 goroutine profile,再用 WriteTo 将它写入 bytes.Buffer 或文件。本文说明 debug=1 文本、debug=0 协议缓冲区和 debug=2 堆栈格式的区别,并给出错误处理与复用封装。465 收藏 -
Go netip.Addr.Next 在最大 IPv4 或 IPv6 地址之后返回零值 Addr,这是没有后继地址的正常语义。本文说明如何用 IsValid 识别边界并安全结束地址池遍历。465 收藏 -
Go errors.As 可以沿着 errors.Join 形成的错误树查找目标类型,并把首个匹配值写入目标指针。本文用可执行的类型化错误示例说明组合错误的遍历顺序、未命中处理和参数边界。465 收藏 -
charmap 是 8-bit 字符集编码器,无法覆盖所有 Unicode rune。本文说明如何用 EncodeRune 判断单个字符,用 Encoder 识别整段转换的错误边界,并选择拒绝、替代或 HTML 转义策略。465 收藏 -
Go Kong 的命令树来自 Go 结构体和标签:普通字段是 flag,带 cmd 标签的嵌套结构体才是子命令。本文从嵌套字段未生效的症状出发,给出二级命令、参数归属和 Run 方法的最小写法。465 收藏 -
Go Kong 同时设置 required 与 default 时,合法默认值也能满足必填。本文结合固定版本源码,说明显式输入、空字符串和业务校验的区别及改写方法。465 收藏 -
用 go-imap v2 的 UIDSearch 配合 SearchCriteria.Since 按日期筛选邮件,理解日期边界、UID 返回值和后续 Fetch 的衔接方式。465 收藏 -
Go 的 float64 可以作为 map key,但 NaN 不等于自身,所以写入后的 NaN 不能按原值稳定查回。本文解释插入、查找、删除的边界,并给出规范化键的写法。465 收藏 -
atomic 只保证参与原子操作的那次访问,不会自动把同一变量旁边的普通读写变成安全访问。本文解释混用产生数据竞争的原因,并给出统一 atomic 或改用 Mutex 的写法。465 收藏 -
Go HMAC 验签应先统一签名编码,再比较原始 MAC 字节。本文说明 hmac.Equal 与 subtle.ConstantTimeCompare 的区别、长度处理和安全的请求校验流程。464 收藏