命令列工具
zeromicro/go-zero avatar
zeromicro/go-zero

go-zero:從 API 描述生成 Go 服務骨架

go-zero 是雲原生的 Go Web 與 RPC 微服務框架,內建韌性設計,並附帶 goctl 命令列工具,可從 .api 檔案產生多語言程式碼。

33,326 個 Star4,315 個 ForkGoMIT

秒懂

它是什麼?
zeromicro/go-zero 的 README 說明其用途、技術路徑與使用限制,本文依文件內容整理可操作的判斷重點。
適合誰用?
適合需要 go-zero 所描述工作流,且能依 README 的 Go 與 goctl 進行驗證的使用者;不適合把文件未說明的相容性或效能當成承諾。先用 zrpc 完成一個最小流程,檢查實際輸入、輸出與失敗訊息,再依 MIT 評估分發、修改或服務化的條件。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 4 天前。
用什麼語言寫的?
主要是 Go(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

一個帶 CLI 生成器的 Web 與 RPC 框架

go-zero 的 README 稱它是一個內建工程實務的 Web 和 RPC 框架,透過彈性設計來維持繁忙服務的穩定性。倉庫中繼資料將其描述為「一個面向雲原生的 Go 微服務框架,帶有用於提高生產力的 cli 工具」。README 說 go-zero 已經為擁有數千萬用戶的站點服務多年,但沒有給出這些站點的名字。框架包含程式碼生成工具 goctl,它讀取 .api 檔案,並能生成 Go、iOS、Android、Kotlin、Dart、TypeScript 和 JavaScript 程式碼。README 還提到專案已列入 CNCF Cloud Native Landscape,但沒有提供更多細節。

針對 go-zero 的第 1 節,具體核對點是 Go、goctl 與 zrpc。先依 README 的入口檢查輸入、產物與錯誤訊息,再把結果和文件宣稱的範圍分開記錄;文件未說明的行為不延伸推定。

若要把 go-zero 放入實際流程,應以專案提供的命令或檔案作小型試跑。觀察 zrpc 是否出現預期資料、Go 是否符合要求,以及失敗時能否定位到該專案的設定邊界;第 1 節應留下獨立紀錄,這比只看展示畫面更能判斷它是否適合目前工作。

第 1 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 7 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 13 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 19 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

團隊為什麼建構它:2018 年的背景

README 說專案始於 2018 年初,團隊從 Java 和 MongoDB 的單體架構遷移到微服務。他們選擇 Go,是因為高效能、語法簡單、部署體驗好、資源消耗低;選擇自研微服務框架,是為了更好地隔離問題、更容易擴充功能、更快解決問題。所列設計原則是簡單、高可用、彈性、開發者友善、易於擴充。這些只是專案自己的敘述;README 沒有提供遷移或設計結果的外部證據。

針對 go-zero 的第 2 節,具體核對點是 Go、goctl 與 zrpc。先依 README 的入口檢查輸入、產物與錯誤訊息,再把結果和文件宣稱的範圍分開記錄;文件未說明的行為不延伸推定。

若要把 go-zero 放入實際流程,應以專案提供的命令或檔案作小型試跑。觀察 zrpc 是否出現預期資料、Go 是否符合要求,以及失敗時能否定位到該專案的設定邊界;第 2 節應留下獨立紀錄,這比只看展示畫面更能判斷它是否適合目前工作。

第 2 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 8 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 14 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 20 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

彈性特性與微服務工具

README 列出了內建的鏈路逾時控制、並發控制、限流、自適應熔斷器和自適應過載保護,並稱這些都不需要設定。它還提到可以整合到其他框架的中間件、自動請求參數驗證,以及一批微服務管理和並發工具包。在實作特性部分,又加入了服務發現、負載平衡、呼叫追蹤、快取管理、指標和監控。README 將這些作為設計聲明呈現,頁面上沒有程式碼範例或設定細節。

針對 go-zero 的第 3 節,具體核對點是 Go、goctl 與 zrpc。先依 README 的入口檢查輸入、產物與錯誤訊息,再把結果和文件宣稱的範圍分開記錄;文件未說明的行為不延伸推定。

若要把 go-zero 放入實際流程,應以專案提供的命令或檔案作小型試跑。觀察 zrpc 是否出現預期資料、Go 是否符合要求,以及失敗時能否定位到該專案的設定邊界;第 3 節應留下獨立紀錄,這比只看展示畫面更能判斷它是否適合目前工作。

第 3 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 9 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 15 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 21 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

快速入門中的 goctl 工作流

快速入門從安裝 goctl 開始,可以透過 `go install github.com/zeromicro/go-zero/tools/goctl@latest`、Homebrew 或 Docker 映像完成。一個簡單的 greet.api 檔案定義 Request 和 Response 型別,以及帶路徑參數的 GET 路由。執行 `goctl api go -api greet.api -dir greet` 會生成一個包含 etc、handler、logic、svc 和 types 套件的 Go 專案。服務透過 `go run greet.go -f etc/greet-api.yaml` 執行,預設連接埠是 8888,並且 README 說明該連接埠可以在 etc/greet-api.yaml 中設定。README 還展示了用戶端生成命令,例如 `goctl api java -api greet.api -dir greet` 和 `goctl api dart -api greet.api -dir greet`。生成結構有文件說明,但 README 沒有解釋 goctl 如何處理所有 API 語法邊界情況。

針對 go-zero 的第 4 節,具體核對點是 Go、goctl 與 zrpc。先依 README 的入口檢查輸入、產物與錯誤訊息,再把結果和文件宣稱的範圍分開記錄;文件未說明的行為不延伸推定。

若要把 go-zero 放入實際流程,應以專案提供的命令或檔案作小型試跑。觀察 zrpc 是否出現預期資料、Go 是否符合要求,以及失敗時能否定位到該專案的設定邊界;第 4 節應留下獨立紀錄,這比只看展示畫面更能判斷它是否適合目前工作。

第 4 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 10 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 16 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 22 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

AI 輔助開發工具

README 介紹了面向 Claude、GitHub Copilot、Cursor 和 Windsurf 的 AI 工具。它提到三個專案:ai-context 是工作流指南,zero-skills 是模式庫,mcp-zero 是透過 Model Context Protocol 提供程式碼生成工具。設定說明包括 Copilot 和 Cursor 的 git submodule 命令、Claude Desktop 的 git clone 和建置步驟,以及 Claude 的 JSON 檔案設定。README 說這些工具配合使用可以生成符合框架規範的程式碼,但沒有說明生成程式碼的品質,也沒有與手動使用 goctl 進行對比。

針對 go-zero 的第 5 節,具體核對點是 Go、goctl 與 zrpc。先依 README 的入口檢查輸入、產物與錯誤訊息,再把結果和文件宣稱的範圍分開記錄;文件未說明的行為不延伸推定。

若要把 go-zero 放入實際流程,應以專案提供的命令或檔案作小型試跑。觀察 zrpc 是否出現預期資料、Go 是否符合要求,以及失敗時能否定位到該專案的設定邊界;第 5 節應留下獨立紀錄,這比只看展示畫面更能判斷它是否適合目前工作。

第 5 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 11 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 17 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 23 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

基準測試、授權條款和仍需核實的問題

README 展示了一張基準測試圖片,並連結到外部測試程式碼,但倉庫本身沒有發布任何基準資料。關於服務數千萬用戶的說法反覆出現,卻沒有說明是哪些服務。MIT 授權條款摘錄授予使用、複製、修改、合併、發布、分發、再授權和銷售的權利,條件是需要包含版權聲明。授權條款明確聲明不提供擔保,也不承擔責任。授權條款沒有提到安全狀況、支援或維護,這些在倉庫材料中都沒有得到確立。

針對 go-zero 的第 6 節,具體核對點是 Go、goctl 與 zrpc。先依 README 的入口檢查輸入、產物與錯誤訊息,再把結果和文件宣稱的範圍分開記錄;文件未說明的行為不延伸推定。

若要把 go-zero 放入實際流程,應以專案提供的命令或檔案作小型試跑。觀察 zrpc 是否出現預期資料、Go 是否符合要求,以及失敗時能否定位到該專案的設定邊界;第 6 節應留下獨立紀錄,這比只看展示畫面更能判斷它是否適合目前工作。

第 6 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 12 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

第 18 次檢查 go-zero 時,將 goctl 作為固定觀察點,記下 Go 的版本或環境值,並比較 zrpc 在成功與失敗輸入下的差異。這項記錄只針對本專案的文件入口,不把未列出的能力當成已支援。

編輯結論

適合需要 go-zero 所描述工作流,且能依 README 的 Go 與 goctl 進行驗證的使用者;不適合把文件未說明的相容性或效能當成承諾。先用 zrpc 完成一個最小流程,檢查實際輸入、輸出與失敗訊息,再依 MIT 評估分發、修改或服務化的條件。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記