Go项目文档:高级技术与工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么文档就是代码



在Go开发的初始阶段,注释常常被视为一种形式。然而,对于一个成熟的项目来说,高质量的文档变得至关重要。它可以加速新开发者的入职,简化重构,作为API用户的唯一真实来源,并帮助避免错误。在高级层面,Go中的文档编写变成了一门基于严格约定、工具和示例的学科。



在本文中,我们讨论的不仅仅是“如何写注释”,而是如何利用最佳实践和生态系统能力,为Go项目创建完整、可维护且有用的文档。



1. 结构与风格:从包到函数



Go提供了内置工具go doc(以前是godoc),它可以自动从代码中提取注释。为了使文档可读且有用,必须遵守严格的格式化规则。



1.1. 包注释

每个包都应该有一个包注释,直接放在package声明之前。这个注释是用户打开文档时首先看到的内容。它应该描述包的用途、主要功能,并在必要时提供使用示例的链接。



// Package calculator 提供用于对整数执行基本// 算术运算的函数。//// 该包支持加法、减法、乘法和除法。// 使用示例可以在 example_test.go 文件中找到。package calculator


1.2. 类型和函数的注释

对导出(公开)标识符的注释应以标识符本身的名称开头。这个约定使得文档自文档化,并且在快速浏览时易于理解。



  • 函数:以“FunctionName 执行/返回...”开头。
  • 类型:以“TypeName 表示/是...”开头。
  • 常量和变量:描述一组或特定的值。


// Add 返回两个整数 a 和 b 的和。func Add(a, b int) int {    return a + b}

// Calculator 表示用于执行连续// 算术运算的结构体。type Calculator struct { result int}


1.3. 对非导出元素的注释

对于内部(私有)函数和类型,注释不是必需的,但如果逻辑复杂,建议添加。使用普通的单行注释//来解释“为什么”,而不是“是什么”(因为“是什么”可以从代码中看出)。



2. 代码示例作为文档的一部分



展示API工作的最佳方式是可测试的示例(Example函数)。Go会自动将它们包含在由go doc生成的文档中,更重要的是,在运行测试时会验证其正确性。



2.1. 创建Example函数

示例放在以_test.go为后缀的文件中。函数名必须以Example开头,并且可以包含类型或方法名以提供上下文。



// 文件: calculator_test.go

package calculator

import "fmt"

func ExampleAdd() { sum := Add(2, 3) fmt.Println(sum) // Output: 5}

func ExampleCalculator_Add() { c := Calculator{} c.Add(10) c.Add(5) fmt.Println(c.Result()) // Output: 15}


2.2. 示例中的特殊注释

关键元素是// Output:这一行。go test工具会将函数的标准输出与该行之后的预期文本进行比较。如果输出不匹配,测试将失败。这确保了文档始终是最新且可用的。



博客

书籍推荐