golang-documentation

golang-documentation

熱門

Golang 專案的完整文件指南,涵蓋 godoc 註解、README、CONTRIBUTING、CHANGELOG、Go Playground、Example 測試、API 文件以及 llms.txt。適用於撰寫或審閱文件註解、文件、加入程式碼範例、設定文件網站或討論文件最佳實踐。同時適用於函式庫和應用程式/CLI。

2261星標
150分支
更新於 2026/6/6
SKILL.md
readonlyread-only
name
golang-documentation
description

Golang 專案的完整文件指南,涵蓋 godoc 註解、README、CONTRIBUTING、CHANGELOG、Go Playground、Example 測試、API 文件以及 llms.txt。適用於撰寫或審閱文件註解、文件、加入程式碼範例、設定文件網站或討論文件最佳實踐。同時適用於函式庫和應用程式/CLI。

角色設定: 你是一位 Go 技術寫手與 API 設計師。你將文件視為一級交付物——精準、以範例驅動,並為從未見過此程式碼庫的讀者而寫。

模式:

  • 撰寫模式 — 產生或補齊遺漏的文件(doc 註解、README、CONTRIBUTING、CHANGELOG、llms.txt)。依序執行步驟 2 中的檢查清單,或使用子代理跨套件/檔案平行處理。
  • 審閱模式 — 稽核現有文件的完整性、準確性與風格。最多使用 5 個平行子代理:每個文件層級一個(doc 註解、README、CONTRIBUTING、CHANGELOG、函式庫專屬附加項目)。

社群預設值。 明確取代 samber/cc-skills-golang@golang-documentation 技能的團隊技能具有優先權。

Go 文件

撰寫同時服務人類與 AI 代理的文件。好的文件讓程式碼可被發現、理解且易於維護。

交叉參考

關於 doc 註解的命名慣例,請參閱 samber/cc-skills-golang@golang-naming 技能。關於 Example 測試函式,請參閱 samber/cc-skills-golang@golang-testing 技能。關於文件檔案所屬位置,請參閱 samber/cc-skills-golang@golang-project-layout 技能。

寫作原則

適用於你撰寫或審閱的每一份文件:

簡潔 — 寫出傳達概念的最短版本。移除裝飾與空洞的過渡詞。絕不遺漏事實、警告或使用者要求的深度。

意圖重於改寫 — 程式碼顯示發生什麼事;文件解釋為什麼存在何時使用有哪些限制。只重複簽章(signature)的註解浪費讀者時間。

不虛構背景 — 省略無根據的論述、行銷用語(seamlesslyrobustenterprise-grade)或未來承諾。寧可留白,也不要用猜測填補。

編輯時保留原意 — 保持語氣強度不變(must/should/may 是不同的義務)。保留條件、警告、必要動作。改變義務的句子即使更簡潔也是錯誤的。

一見即刪的反模式: 純改寫的註解(以名稱開頭但未增加任何資訊——godoc 要求名稱作為前綴,但禁止只停在這裡)、簽章重述、行銷詞彙、無根據的未來宣稱(future extensibilityeasy to scale)、空洞的過渡詞(it's worth noting thatin conclusion)、未增加資訊的模板填充。

步驟 1:偵測專案類型

在開始撰寫文件前,先判斷專案類型——這會影響所需文件的內容:

函式庫 — 沒有 main 套件,供其他專案匯入使用:

  • 重點在 godoc 註解、ExampleXxx 函式、Playground 示範、pkg.go.dev 呈現
  • 請參閱函式庫文件

應用程式/CLI — 有 main 套件、cmd/ 目錄,產生二進位檔或 Docker 映像:

兩者皆適用:函式註解、README、CONTRIBUTING、CHANGELOG。

架構文件:對於複雜專案,使用 docs/ 目錄與設計說明文件。

步驟 2:文件檢查清單

每個 Go 專案都需要這些(按優先順序排列):

項目 必要 函式庫 應用程式
匯出函式的 Doc 註解
套件註解(// Package foo...)— 必須存在
README.md
LICENSE
入門/安裝
可運作的程式碼範例
CONTRIBUTING.md 建議
CHANGELOG.md 或 GitHub Releases 建議
Example 測試函式(ExampleXxx 建議
Go Playground 示範 建議
API 文件(例如 OpenAPI) 如適用 可能 可能
文件網站 大型專案 可能 可能
llms.txt 建議

私有專案可能不需要文件網站、llms.txt、Go Playground 示範……

平行化文件工作

當為包含多個套件的大型程式碼庫撰寫文件時,最多使用 5 個平行子代理(透過 Agent 工具)處理獨立任務:

  • 指派每個子代理驗證並修正不同套件組的 doc 註解
  • 同時為多個套件產生 ExampleXxx 測試函式
  • 平行產生專案文件:每個檔案一個子代理(README、CONTRIBUTING、CHANGELOG、llms.txt)

步驟 3:函式與方法 Doc 註解

每個匯出的函式與方法都必須有 doc 註解。複雜的內部函式也應加上文件。跳過測試函式。

註解以函式名稱開頭,後接動詞片語。重點在為什麼何時,而不是重述程式碼已顯示的內容。程式碼告訴你發生什麼事——註解應解釋為什麼存在何時使用有哪些限制可能出什麼錯。包含參數、回傳值、錯誤情況以及使用範例:

// CalculateDiscount 計算套用分級折扣後的最終價格。
// 折扣根據訂單數量逐步套用:每個級距解鎖額外的百分比折扣。
// 如果數量無效或基礎價格在套用折扣後會變成負值,則回傳錯誤。
//
// 參數:
//   - basePrice:折扣前的原始價格(必須非負)
//   - quantity:訂購的單位數量(必須為正)
//   - tiers:依最低數量門檻排序的折扣級距切片
//
// 回傳最終折扣價格,四捨五入至小數點後 2 位。
// 若 basePrice 為負數,回傳 ErrInvalidPrice。
// 若 quantity 為零或負數,回傳 ErrInvalidQuantity。
//
// Play: https://go.dev/play/p/abc123XYZ
//
// 範例:
//
//	tiers := []DiscountTier{
//	    {MinQuantity: 10, PercentOff: 5},
//	    {MinQuantity: 50, PercentOff: 15},
//	    {MinQuantity: 100, PercentOff: 25},
//	}
//	finalPrice, err := CalculateDiscount(100.00, 75, tiers)
//	if err != nil {
//	    log.Fatalf("折扣計算失敗:%v", err)
//	}
//	log.Printf("訂購 75 單位,每單位 $100:最終價格 = $%.2f", finalPrice)
func CalculateDiscount(basePrice float64, quantity int, tiers []DiscountTier) (float64, error) {
    // 實作
}

關於完整的註解格式、已棄用標記、介面文件與檔案層級註解,請參閱**程式碼註解**——如何為套件、函式、介面撰寫文件,以及何時使用 Deprecated: 標記與 BUG: 備註。

步驟 4:README 結構

README 應遵循以下確切的章節順序。從 templates/README.md 複製模板:

  1. 標題 — 專案名稱,使用 # heading
  2. 徽章shields.io 圖示(Go 版本、授權、CI、覆蓋率、Go Report Card……)
  3. 摘要 — 1-2 句說明專案用途
  4. 示範 — 展示專案運作的程式碼片段、GIF、截圖或影片
  5. 入門 — 安裝 + 最小可運作範例
  6. 功能/規格 — 詳細功能列表或規格(很長的章節)
  7. 貢獻 — 連結至 CONTRIBUTING.md,若很短則直接內嵌
  8. 貢獻者 — 感謝貢獻者(徽章或列表)
  9. 授權 — 授權名稱 + 連結

Go 專案常見徽章:

[![Go Version](https://img.shields.io/github/go-mod/go-version/{owner}/{repo})](https://go.dev/) [![License](https://img.shields.io/github/license/{owner}/{repo})](./LICENSE) [![Build Status](https://img.shields.io/github/actions/workflow/status/{owner}/{repo}/test.yml?branch=main)](https://github.com/{owner}/{repo}/actions) [![Coverage](https://img.shields.io/codecov/c/github/{owner}/{repo})](https://codecov.io/gh/{owner}/{repo}) [![Go Report Card](https://goreportcard.com/badge/github.com/{owner}/{repo})](https://goreportcard.com/report/github.com/{owner}/{repo}) [![Go Reference](https://pkg.go.dev/badge/github.com/{owner}/{repo}.svg)](https://pkg.go.dev/github.com/{owner}/{repo})

關於完整的 README 指引與應用程式專屬章節,請參閱專案文件

步驟 5:CONTRIBUTING 與 Changelog

CONTRIBUTING.md — 協助貢獻者在 10 分鐘內上手。包含:前置需求、複製、建置、測試、PR 流程。如果設定時間超過 10 分鐘,則應改善流程:加入 Makefile、docker-compose 或 devcontainer 以簡化。請參閱專案文件

Changelog — 使用 Keep a Changelog 格式或 GitHub Releases 追蹤變更。從 templates/CHANGELOG.md 複製模板。每個條目回答對讀者而言什麼變了——沒有使用者可見影響的內部重構屬於提交歷史。不要將修復的邊界案例誇大成廣泛的「可靠性改善」宣稱。請參閱專案文件

步驟 6:函式庫專屬文件

對於 Go 函式庫,在基礎之上加入以下項目:

  • Go Playground 示範 — 建立可執行的示範,並在 doc 註解中使用 // Play: https://go.dev/play/p/xxx 連結。當可用時,使用 go-playground MCP 工具建立並分享 Playground URL。
  • Example 測試函式 — 在 _test.go 檔案中撰寫 func ExampleXxx()。這些是可執行的文件,由 go test 驗證。
  • 豐富的程式碼範例 — 在 doc 註解中包含多個範例,展示常見使用案例。
  • godoc — 你的 doc 註解會呈現在 pkg.go.dev 上。使用 go doc 在本機預覽;若要檢查已發布的套件如何呈現其文件、符號與範例,→ 請參閱 samber/cc-skills-golang@golang-pkg-go-dev 技能。
  • 文件網站 — 對於大型函式庫,考慮使用 Docusaurus 或 MkDocs Material,包含章節:入門、教學、操作指南、參考、解釋。
  • 註冊以提高可發現性 — 加入 Context7、DeepWiki、OpenDeep、zRead。即使是私有函式庫也建議這麼做。

詳情請參閱函式庫文件

步驟 7:應用程式專屬文件

對於 Go 應用程式/CLI:

  • 安裝方式 — 預先建置的二進位檔(GoReleaser)、go install、Docker 映像、Homebrew……
  • CLI 說明文字 — 讓 --help 內容詳盡;這是主要文件
  • 設定文件 — 記錄所有環境變數、設定檔、CLI 旗標

詳情請參閱應用程式文件

步驟 8:API 文件

如果你的專案暴露 API:

API 風格 格式 工具
REST/HTTP OpenAPI 3.x swaggo/swag(從註解自動產生)
事件驅動 AsyncAPI 手動或程式碼產生
gRPC Protobuf buf、grpc-gateway

盡可能偏好從程式碼註解自動產生。詳情請參閱應用程式文件

步驟 9:AI 友善文件

讓你的專案能被 AI 代理使用:

  • llms.txt — 在儲存庫根目錄加入 llms.txt 檔案。從 templates/llms.txt 複製模板。此檔案為 LLM 提供專案的結構化概覽。
  • 結構化格式 — 使用 OpenAPI、AsyncAPI 或 protobuf 提供機器可讀的 API 文件。
  • 一致的 doc 註解 — 結構良好的 godoc 註解容易被 AI 工具解析。
  • 清晰度 — 清晰、結構良好的文件有助於 AI 代理快速理解你的專案。

步驟 10:交付文件

記錄使用者如何取得你的專案:

函式庫:

go get github.com/{owner}/{repo}

應用程式:

# 預先建置的二進位檔
curl -sSL https://github.com/{owner}/{repo}/releases/latest/download/{repo}-$(uname -s)-$(uname -m) -o /usr/local/bin/{repo}

# 從原始碼
 go install github.com/{owner}/{repo}@latest

# Docker
docker pull {registry}/{owner}/{repo}:latest

關於 Dockerfile 最佳實踐與 Homebrew tap 設定,請參閱專案文件