Skip to main content

Go CLI

這是一個非常好的問題。簡單直接的回答是:是的,您仍然會大量使用 go get,但它的角色和 go mod 是互補的,而不是二選一。

在現代 Go 開發(Go Modules 模式)中,這兩個指令的分工非常明確:

1. go get:用來「新增」或「升級」依賴

即使有了 Modules 系統,您不需要(也不建議)手動編輯 go.mod 文件來新增依賴。您依然使用 go get 來告訴 Go 語言您需要哪個包。

  • 動作:當您想要在專案中引入一個新庫(例如 Gin 框架)時。
  • 指令go get github.com/gin-gonic/gin
  • 發生了什麼
    1. Go 會下載該包的源代碼。
    2. Go 會自動更新您的 go.mod 文件(加入 require 行)和 go.sum 文件(加入雜湊校驗)。
    3. 這解決了傳統 go get 只是把代碼下載到 $GOPATH 但不記錄版本的問題。

2. go mod:用來「整理」與「維護」依賴

go mod 是一組命令,用來維護專案的依賴狀態,確保 go.mod 文件是乾淨且正確的。

  • 常用指令
    • go mod init <module-name>:專案開始時用一次,初始化專案。
    • go mod tidy(最常用):這是您會頻繁使用的指令。它會自動掃描您的程式碼,把您程式碼中有用到但 go.mod 沒記錄的包加進去,並把 go.mod 裡有記錄但程式碼沒用到的包刪除
    • go mod vendor:如果您需要將所有依賴包複製一份到專案內的 vendor 目錄(為了離線編譯或確保依賴代碼存檔)時使用。

總結:現代開發流程

在實際工作中,您的操作流程通常是這樣的:

  1. 初始化go mod init my-project
  2. 寫代碼:在代碼中 import "github.com/some/lib"
  3. 新增依賴
    • 方法 A:在終端機執行 go get github.com/some/lib(這是最標準的做法)。
    • 方法 B(懶人法):直接在代碼寫 import,然後執行 go mod tidy,Go 會自動幫您 get 下來並更新 go.mod
  4. 整理依賴:開發一段時間後,執行 go mod tidy 來清理不再需要的依賴。

所以,go get 是「進貨」(下載包),go mod 是「盤點」(整理清單)。兩者您都會用到。


補充:Go 開發常用 CLI 指令一覽

除了 go get / go mod 之外,在日常開發中也會很常碰到這些指令,可以一起記:

  • go run:直接編譯並執行 Go 程式(適合開發階段快速測試)。

    • 範例:
      • go run main.go
      • go run ./cmd/server
  • go build:編譯程式,但不執行,會產生可執行檔。

    • 範例:
      • go build(在目前目錄輸出執行檔)
      • go build -o my-app ./cmd/server
  • go test:執行單元測試,是 Go 內建的測試工具。

    • 範例:
      • go test ./...(跑整個專案所有測試)
      • go test -v ./pkg/service(針對某個目錄,顯示詳細訊息)
  • go install:編譯並安裝可執行檔到 $GOBIN$GOPATH/bin

    • 常用來安裝第三方 CLI 工具,例如:
      • go install golang.org/x/tools/cmd/goimports@latest
  • go fmt / gofmt:自動格式化程式碼,符合官方風格。

    • 一般建議搭配 IDE 自動執行,或在專案根目錄執行:
      • gofmt -w .
  • go env:查看目前 Go 的環境設定(GOPATH、GOMOD、GOBIN 等)。

    • 範例:
      • go env GOPATH
      • go env GOMOD
  • go list:列出模組或套件資訊,在偵錯依賴或工具腳本時很有用。

    • 範例:
      • go list ./...
  • go doc:在終端機中閱讀文件說明。

    • 範例:
      • go doc fmt.Println

如果把整體流程對照起來,可以大致想成:

  1. go mod init 建專案,go get / go mod tidy 管理依賴。
  2. 開發時用 go run 快速測,go test 保證品質。
  3. 要發佈或部署時用 go build / go install 產生正式可執行檔。
  4. 全程搭配 gofmt / go fmtgo env 幫助維護環境與程式碼品質。