命令列介面 (CLIs)

概覽

CLI 開發者偏好使用 Go,因為它具備可移植性、高效能且易於開發

命令列介面 (CLI) 與圖形使用者介面 (GUI) 不同,它們僅限文字模式。雲端與基礎架構應用程式由於具備易於自動化與遠端操控的特性,大多採用 CLI。

主要優勢

利用快速的編譯時間來建構啟動迅速且可在任何系統上執行的程式

CLI 開發者發現 Go 是設計應用程式的理想選擇。Go 能極快地編譯成單一二進位檔案,以一致的風格跨平台運作,並擁有強大的開發者社群。開發者只需一台 Windows 或 Mac 筆電,就能在幾秒鐘內為 Go 支援的數十種架構與作業系統建構程式,無需複雜的建構農場(build farms)。沒有其他編譯語言能像 Go 這樣具備如此高的可移植性與編譯速度。Go 應用程式會被建構為單一且獨立的二進位檔,這使得 Go 應用程式的安裝變得極其簡單。

具體而言,以 Go 編寫的程式可以在任何系統上執行,無需依賴任何現有的函式庫、執行環境或相依套件。此外,以 Go 編寫的程式擁有即時的啟動時間,這與 C 或 C++ 類似,卻是其他程式語言難以達到的。

使用案例

使用 Go 來建構優雅的 CLI

在 Go 中開發 CLI 時,有兩個工具被廣泛使用:Cobra 與 Viper。

Cobra 既是一個用於建立強大現代化 CLI 應用程式的函式庫,也是一個用於在 Go 中生成應用程式與 CLI 應用程式的工具。許多熱門的 Go 應用程式背後都有 Cobra 的身影,包括 CoreOS、Delve、Docker、Dropbox、Git Lfs、Hugo、Kubernetes 以及更多專案。OpenFaaS 創辦人 Alex Ellis 表示,憑藉著整合式的指令說明、自動完成與文件生成功能,「它讓每個指令的文檔編寫變得非常簡單」。

Viper 是專為 Go 應用程式設計的完整設定解決方案,旨在應用程式內部處理各種設定需求與格式。Cobra 與 Viper 是為了一起運作而設計的。

Viper 支援巢狀結構的設定,允許 CLI 開發者管理大型應用程式中多個部分的設定。Viper 也提供了建構「十二要素應用程式」(Twelve-Factor App) 所需的所有工具。

「如果你不想污染你的命令列,或者你正在處理不希望出現在歷史紀錄中的敏感資料,那麼使用環境變數是個好主意。要做到這一點,你可以使用 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 大多數功能的純 Go 實作(基於 MIT 授權)

  • dixonwille/wmenu

    一個易於使用的 CLI 應用程式選單結構,提示使用者進行選擇

  • spf13/pflag

    Go 內建 flag 套件的直接替代品,實作了 POSIX/GNU 風格的參數旗標

  • golang/glog

    適用於 Go 的分級執行紀錄(Logging)

  • go-prompt

    一個用於建構強大互動式提示(prompt)的函式庫,讓使用 Go 建構跨平台命令列工具變得更簡單。

查看更多