Go语言技术文章
-
Go net/mail.Address.String 会把显示名按邮件地址语法重新格式化。本文解释可打印 ASCII 名称为何使用 quoted-string、非 ASCII 名称为何走 RFC 2047 编码,并给出生成和解析邮件头时的正确用法。280 收藏 -
Go net/mail.ParseAddress 将单个邮件地址解析为显示名和邮箱字段。通过原创联系人示例比较手动切分与标准库解析,说明引号逗号、错误处理和格式化文本的区别。279 收藏 -
sync.Pool 取出的对象带着上一次请求的字段时,问题通常不是 Pool 失效,而是复用对象没有在交接边界清理。本文从临时对象契约、Reset 设计、Get/Put 时机和不适合放入 Pool 的状态四个方面,整理一套可落地的排查方式。278 收藏 -
用afero MemMapFs为文件读取测试准备独立目录,示例讲清父目录创建、文件写入和实例注入,并区分正常内容、缺文件与真实磁盘测试的适用场景。278 收藏 -
context.WithValue 出现字段覆盖时,通常不是值被修改,而是相同键在父子 Context 中发生遮蔽。本文用包内私有键类型和类型安全访问器规避跨包冲突。277 收藏 -
Go 的 URL.Path 是解码后的路径语义,EscapedPath() 面向转义表示;本文用 %2F 示例说明路由匹配、日志记录和请求拼接时该怎么选。275 收藏 -
Go base64.NewEncoder 写入成功不代表尾部已输出。文章解释三字节分组与尾部缓冲,给出检查 Copy、Close 错误的封装,区分编码器、缓冲层与文件收尾,并补充尾部长度测试与无填充编码边界。275 收藏 -
Go fuzzing 的种子语料既可以来自 f.Add,也可以来自 testdata/fuzz/FuzzTestName 目录。本文给出按 Fuzz 目标拆分目录、区分样本用途并纳入安全审计的组织方法。274 收藏 -
html/template 并不是简单地把所有字符串统一转义,而是根据插值所在的 HTML、属性、URL、JavaScript 或 CSS 上下文选择处理方式。本文用最小示例排查转义异常、ZgotmplZ 和安全类型误用。274 收藏 -
用 sort.Search 的单调谓词找到升序切片中第一个大于等于目标值的位置,正确处理重复值、未命中和末尾插入。274 收藏 -
Go fuzz 失败语料只有在环境可重建时才真正可复现。本文把 time.Now 与包级随机函数改成可注入时钟和局部随机源,并将时刻偏移、随机种子纳入语料。273 收藏 -
解释 Go 1.24 的 testing.B.Loop 如何自动划定基准计时边界,把初始化和清理排除在循环体耗时之外,并对比传统 b.N 写法的迁移注意事项。273 收藏 -
Go 的 flag.FlagSet 通过 ContinueOnError 把参数解析失败交给调用方处理。本文比较三种 ErrorHandling 策略,并给出可复用、可测试的解析函数写法。273 收藏 -
Go afero 的 MemMapFs 和 OsFs 都实现 afero.Fs,但测试边界完全不同:前者把文件放在进程内存中,适合快速隔离的单元测试;后者调用真实操作系统文件 API,适合补充权限、路径和平台语义验证。本文按排查清单给出选择方法。272 收藏 -
Go 客户端配置 TLS 会话缓存后仍可能频繁完整握手。本文区分 HTTP 长连接复用与 TLS 会话恢复,说明 ClientSessionCache、ServerName、进程、LRU 容量和多节点票据密钥的边界,并给出 DidResume 排查写法。270 收藏