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 - 發生了什麼:
- Go 會下載該包的源代碼。
- Go 會自動更新您的
go.mod文件(加入require行)和go.sum文件(加入雜湊校驗)。 - 這解決了傳統
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目錄(為了離線編譯或確保依賴代碼存檔)時使用。
總結:現代開發流程
在實際工作中,您的操作流程通常是這樣的:
- 初始化:
go mod init my-project - 寫代碼:在代碼中
import "github.com/some/lib"。 - 新增依賴:
- 方法 A:在終端機執行
go get github.com/some/lib(這是最標準的做法)。 - 方法 B(懶人法):直接在代碼寫
import,然後執行go mod tidy,Go 會自動幫您get下來並更新go.mod。
- 方法 A:在終端機執行
- 整理依賴:開發一段時間後,執行
go mod tidy來清理不再需要的依賴。
所以,go get 是「進貨」(下載包),go mod 是「盤點」(整理清單)。兩者您都會用到。
補充:Go 開發常用 CLI 指令一覽
除了 go get / go mod 之外,在日常開發中也會很常碰到這些指令,可以一起記:
-
go run:直接編譯並執行 Go 程式(適合開發階段快速測試)。- 範例:
go run main.gogo 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
- 常用來安裝第三方 CLI 工具,例如:
-
go fmt/gofmt:自動格式化程式碼,符合官方風格。- 一般建議搭配 IDE 自動執行,或在專案根目錄執行:
gofmt -w .
- 一般建議搭配 IDE 自動執行,或在專案根目錄執行:
-
go env:查看目前 Go 的環境設定(GOPATH、GOMOD、GOBIN 等)。- 範例:
go env GOPATHgo env GOMOD
- 範例:
-
go list:列出模組或套件資訊,在偵錯依賴或工具腳本時很有用。- 範例:
go list ./...
- 範例:
-
go doc:在終端機中閱讀文件說明。- 範例:
go doc fmt.Println
- 範例:
如果把整體流程對照起來,可以大致想成:
- 用
go mod init建專案,go get/go mod tidy管理依賴。 - 開發時用
go run快速測,go test保證品質。 - 要發佈或部署時用
go build/go install產生正式可執行檔。 - 全程搭配
gofmt/go fmt、go env幫助維護環境與程式碼品質。