-
Go 源码分析中,token.Pos 不是直接可读的文件名和行列。本文用同一个 token.FileSet 说明 FileSet.File、File.Position、File.Offset 与 FileSet.Position 的配合方式,并处理 NoPos 和跨 FileSet 查询边界。
-
Go 默认 Transport 会按目标协议和环境变量选择代理。本文解释 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 与进程缓存的关系,提供独立 Transport 的配置诊断示例及部署迁移注意事项。
-
go/types.Alias 的 TypeParams 用来读取泛型别名声明参数,TypeArgs 用来读取具体实例实参。本文通过类型检查结果说明两者的区别、Origin 的归并用途、nil 边界以及 Alias 与 Named 的选择规则。
-
Go 里的 defer 绑定外围函数返回,不会在 for 的每轮迭代结束时自动执行。把 defer 放在长循环中处理文件、响应体或 Rows,可能让资源持续累积;本文给出抽函数、显式关闭和代码审查的取舍。
-
Go HTTP 服务端重复读取 Body 得到空内容,通常是中间件已消费原流。通过小服务说明入口限量缓存、重建读取器、错误处理与关闭边界,并区分 GetBody 和已解析对象复用。
-
Go http.Cookie.String 会根据字段组合 Cookie 或 Set-Cookie 文本,但非法 Name 会直接得到空字符串,非法 Domain 会被丢弃,Value 和 Path 中的非法字节会被清理。本文结合 Valid 说明怎样在发送前判断最终格式。
-
Unicode 规范化统一码点表示,不保证 UTF-8 字节数缩小。本文解释分解与组合排除导致的长度变化,给出 NFC 存储函数,并区分输入上限、结果上限和字符计量。
-
Go x/text/encoding/japanese 的 EUCJP 解码出现替换字符,通常不是 UTF-8 字符串本身坏了,而是源字节并非完整且正确的 EUC-JP。本文按输入编码、解码 API 和流式分块三个层面排查,并给出 Bytes 与 Reader 的用法。
-
用 Go netip.AddrFrom16 从 16 字节数组构造 IPv6 地址,说明字节布局、IPv4 映射 IPv6 的语义,以及 AddrFromSlice 的长度边界。
-
Go 程序在 arm64 上变慢时,不能只看一组 benchmark 就认定是编译器问题。本文先固定代码、输入和环境,再用 amd64/arm64 对照、同机 Go 工具链对照、CPU profile 和指令集实验,把性能下降归因到业务代码、标准库、运行时或编译器生成代码。
-
Go 文件上传时不要只相信扩展名或客户端 Content-Type。本文说明 http.DetectContentType 最多读取前 512 字节的工作边界,给出保留完整文件流的实现,并演示如何在 multipart 文件 Part 上接入允许类型判断。
-
Go 构建在启用 vendor 模式时会从主模块根目录的 vendor 目录取包,不会读取模块缓存中的同名新版本。本文拆开 go.mod、vendor/modules.txt 与 -mod=vendor 的职责,说明如何更新 vendor、如何暂时切回模块缓存,以及怎样判断版本来源。
-
Testify 的 mock.AnythingOfType 比较的是运行时类型名。本文区分 Go 类型别名与定义类型,说明包限定名称、指针和 MatchedBy 的正确用法。
-
Go time.After 只能返回接收通道。本文用单次所有者模式解释 NewTimer 与 context 取消、Stop 清理、同时就绪及 Go 1.23 语义差异。
-
通用字段读取逻辑经常同时遇到普通值、指针和接口包装值。本文只围绕 reflect.Value 的 Kind 与 Elem,给出安全归一化、nil 处理和按最终 Kind 读取字段的 Go 写法。