-
Go net/mail.ReadMessage 会把原始邮件拆成解析后的 Header 和可继续读取的 Body。本文说明如何按顺序读取头字段与正文流、处理重复字段和大小写,并把 multipart 正文交给下一层解析。
-
Go 的 cipher.NewGCMWithNonceSize 可以接收非标准长度的 nonce,但它会把长度约束带入 AEAD、报文解析和跨系统互操作。本文用一个固定报文格式说明默认构造、自定义构造与迁移代价。
-
围绕 Go 的 chacha20poly1305.New,说明 32 字节密钥、NonceSize、Seal/Open 输入准备,以及构造失败和认证失败时的处理顺序。
-
Go constant.Compare 可以直接比较 constant.Value,不需要先转成 float64。本文用 MakeFromLiteral 构造超出 float64 精确范围的大整数,再说明 LSS、EQL、GTR、Unknown 和近似转换的边界。
-
Go ast.FieldList.NumFields 统计的不是 FieldList.List 的长度,而是每个 Field 中声明名的总数;没有名字的字段按一个计算。本文用函数参数和结构体字段说明合并声明、匿名字段与 nil 边界。
-
Go ast.NewCommentMap 不会重新读取源码。结果为空时应先确认 ParseComments 是否启用及 file.Comments 是否有内容,再区分位置上下文、节点范围和文档注释字段。
-
泛型 Named 实例的 Obj 与 Origin().Obj 返回同一声明对象。通过构造示例说明声明名字、原始类型和实例实参应怎样分别读取与保存。
-
Go types.Selection.Recv 保留选择表达式的接收者类型。通过嵌入方法示例区分选择起点、声明签名和结果类型,并说明 Index、Kind 与缺失记录的处理。
-
comment.Printer 的 TextWidth 只约束 Text 方法生成的纯文本行宽,不参与 HTML 的块级渲染。本文从 Printer 的输出分支解释原因,并给出同一份 Doc 如何分别输出 Text、Markdown 和 HTML 的配置建议。
-
Go types.Scope.Names 会返回当前作用域中已经排序的名称。本文说明如何从 types.Info.Scopes 找到函数 Scope,如何区分当前层、父作用域和嵌套块,以及什么时候才需要自定义排序。
-
Go 的 go/doc/comment.Parser 负责把文档注释解析成 Doc,但包名与当前包符号是否能成为 DocLink,需要 LookupPackage 和 LookupSym 提供上下文。本文用一个自包含示例说明两个回调的参数、返回值、默认行为和常见边界。
-
go/doc/comment.Printer 默认会按 DocLink 生成包和符号链接。本文从默认规则开始,演示如何用 DocLinkBaseURL 统一切换文档根路径,再用 DocLinkURL 按包、类型和方法自定义路由,并区分当前包本地锚点与外部包地址。
-
comment.Parser按缩进结构识别预格式块,不依据内容是否像Go代码。本文通过Paragraph和Code对照,说明如何修正正文缩进并保留真正示例的版式。
-
Go 文档注释中的 # 空格、缩进和空行会影响 Heading 与 Paragraph 的识别;Go 1.19 前的旧式单行标题还可能在 gofmt 后变成显式标题。本文说明识别规则、避免误判的写法,以及如何用 comment.Parser 检查实际块类型。
-
Go 的 go/doc/comment 包可以先把文档注释解析为 *comment.Doc,再由 comment.Printer.Markdown 输出 Markdown 字节。本文按一条完整工作流说明 Parser、Doc、Printer 的职责,以及标题层级、文档链接和输出边界的配置方式。