命令列介面 (CLI)

概觀

CLI 開發人員偏好使用 Go,原因在於其可攜性、效能和易於建立

命令列介面 (CLI) 與圖形使用者介面 (GUI) 不同,僅為文字。雲端和基礎架構應用程式主要基於 CLI,因為它們易於自動化且具備遠端功能。

主要優點

利用快速編譯時間,建置可快速啟動並在任何系統上執行的程式

CLI 的開發人員發現 Go 是設計其應用程式的理想選擇。Go 可非常快速地編譯成單一二進位檔,以一致的風格跨平台運作,並帶來強大的開發社群。開發人員只要使用單一的 Windows 或 Mac 筆記型電腦,就能在幾秒鐘內為 Go 支援的數十種架構和作業系統建置 Go 程式,不需要複雜的建置農場。沒有其他編譯語言可以如此快速或可攜式地建置。Go 應用程式建置在單一的自包含二進位檔中,讓安裝 Go 應用程式變得非常簡單。

特別是,使用 Go 編寫的程式可以在任何系統上執行,而不需要任何現有的函式庫、執行時期或依賴關係。而且使用 Go 編寫的程式具有立即的啟動時間,類似於 C 或 C++,但其他程式語言無法達到。

使用案例

使用 Go 建置優雅的 CLI

在 Go 中開發 CLI 時,廣泛使用的兩個工具為:Cobra 和 Viper。

Cobra 是一個用於建立強大的現代 CLI 應用程式的函式庫,同時也是一個用於在 Go 中產生應用程式和 CLI 應用程式的程式。Cobra 為大多數熱門的 Go 應用程式提供支援,包括 CoreOS、Delve、Docker、Dropbox、Git Lfs、Hugo、Kubernetes,以及 更多其他應用程式。OpenFaaS 創辦人 Alex Ellis 表示,透過整合的指令說明、自動完成和文件,「[它] 讓每個指令的文件化變得非常簡單」。

Viper 是一個完整的 Go 應用程式設定檔解決方案,設計用於在應用程式內處理設定檔需求和格式。Cobra 和 Viper 設計為可共同運作。

Viper 支援設定檔中的巢狀結構,讓 CLI 開發人員可以管理大型應用程式中多個部分的設定檔。Viper 還提供所有必要的工具,可輕鬆建置十二要素應用程式。

「如果你不想讓你的命令列受到汙染,或者如果你處理的是不想顯示在記錄中的敏感資料,那麼使用環境變數會是一個好主意。為此,你可以使用 Viper,」Geudens 建議

客戶 簡介 使用 Go 的專案
Comcast Comcast Comcast Comcast 使用 Go 建立 CLI 應用程式,用於發布和訂閱其流量大的網站。該公司也支援以 Go 編寫的開源客戶端程式庫,專為與 Apache Pulsar 搭配使用而設計。
GitHub GitHub GitHub GitHub 使用 Go 建立命令列工具,讓使用者更容易使用 GitHub,並將 git 封裝起來,以額外的功能和指令加以延伸。
Hugo Hugo Hugo Hugo 是最受歡迎的 Go CLI 應用程式之一,為數千個網站提供支援,包括這個網站。它之所以受歡迎,原因之一是它很容易安裝,這要歸功於 Go。Hugo 作者 Bjørn Erik Pedersen 寫道:「單一執行檔解決了安裝和升級的大部分問題。」

開始使用

用於建立 CLI 的 Go 書籍

  • spf13/cobra

    用於建立強大的現代 CLI 應用程式和一個用於在 Go 中產生應用程式和 CLI 應用程式的程式。

  • spf13/viper

    Go 應用程式的完整組態解決方案,設計用於在應用程式中處理組態需求和格式。

  • urfave/cli

    建立和組織命令列 Go 應用程式的最小架構

  • delve

    為習慣使用編譯語言中原始碼層級偵錯器的程式設計師而建構的簡單且強大的工具

  • chzyer/readline

    提供 GNU Readline 中大部分功能的純 Golang 實作(採用 MIT 授權)

  • dixonwille/wmenu

    CLI 應用程式中易於使用的選單結構,提示使用者做出選擇

  • spf13/pflag

    Go 的 flag 套件的替代方案,實作 POSIX/GNU 風格的旗標

  • golang/glog

    Go 的分層執行記錄

  • go-prompt

    用於建構強大的互動式提示的函式庫,讓使用 Go 建構跨平台命令列工具變得更容易。

檢視更多