Go (也稱為 Golang) 是一種開源的靜態類型程式語言。它最初由 Google 開發。Go 的一些顯著特點包括簡單、高效能、可讀性和高效。
與任何其他著名的程式語言一樣,Go 的標準函式庫提供了豐富的套件。然而,我們也可以透過引入第三方套件來擴充功能。本指南將 示範如何匯入套件並將其整合到您的 Go 專案中。
先決條件
要遵循本指南,您需要準備好以下組件供您使用:
- 一部配置妥當的 Ubuntu 伺服器。深入了解 在 CloudSigma 上配置您自己的 Ubuntu 伺服器.
- Go 程式設計環境。您可以使用這篇關於 在 Ubuntu 上安裝 Go 的指南.
- 一個現代的文字編輯器,例如 Vim, Sublime Text, Atom, Visual Studio Code, Brackets 等。本指南將以 Visual Studio Code .
步驟 1 – 安裝 Go
我們已經討論過安裝核心 Go 程式語言於 Ubuntu 20.04。然而,還有一個更簡單的替代方法: g (一個輕量級的 Go 版本管理器).
我們之所以要使用 g 是因為 Ubuntu 套件庫或 snap 中提供的 Go 版本都不是最新的可用版本 (v1.18 在撰寫本指南時)。一律建議使用任何程式語言套件的最新可用版本。
以下命令將執行 g 安裝指令碼:
|
1 |
wget -qO- https://git.io/g-install | sh -s |


要使變更生效,您必須重新啟動 shell 工作階段。重新啟動後,驗證安裝:
|
1 |
go version |
|
1 |
which go |

安裝 Go 之後,也建議安裝 gopls 。它是官方的 Go 語言伺服器。它與許多文字編輯器相容,例如 VS Code、Vim、Emacs、Sublime Text、Atom 等等。執行以下命令:
|
1 |
go install golang.org/x/tools/gopls@latest |
我們的 Go 程式設計環境現在已準備就緒。
步驟 2 – 建立範例 Go 指令碼
本指南中示範的所有程式碼都將放在單個 Go 指令碼中。建立一個範例 Go 指令碼:
|
1 |
touch practice.go |
對指令碼進行變更後,我們可以使用以下 Go 命令來執行它:
|
1 |
go run practice.go |
在這裡,Go 編譯器將以直譯器模式執行程式碼。
步驟 3 – 使用標準函式庫套件
Go 的標準函式庫中包含大量的集合。它由許多套件組成,例如:
要在 Go 專案中引入任何套件,必須使用 import 語句來實作。該語句由 import 關鍵字以及套件名稱來宣告。例如,要匯入 math/rand ,匯入語句將如下所示:
|
1 |
import "math/rand" |
以下程式碼實作了來自 math/rand 套件的各種功能:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import "math/rand" func main() { for i := 0; i < 10; i++ { println(rand.Intn(25)) } } |
此程式碼示範了一個簡單的 for 迴圈,它在螢幕上列印 10 個隨機整數(0 到 24)。這裡:
- rand.Int() : 此函式呼叫會傳回一個隨機整數。
- rand.Intn() : 作用類似於 rand.Int() 但接受一個參數,該參數定義隨機整數的範圍(從 0 到指定的數字)。
接下來,執行程式碼:
|
1 |
go run practice.go |
輸出將如下所示:

請注意,輸出將完全相同,因為隨機數產生器的種子預設為固定值。這就是 偽隨機數產生器的特性. 您可以了解更多關於 隨機種子的資訊.
步驟 4 – 匯入多個套件
更大且更複雜的專案需要包含多個套件。您要如何將它們匯入到您的 Go 程式碼中?一個可行的方法是為每個匯入的套件使用個別的 import 語句。然而,與以下匯入結構相比,這種方法效率較低:
|
1 2 3 4 5 6 7 8 9 |
import ( "<package_1>" "<package_2>" "<package_3>" ) |
在這裡,單個 import 語句同時包含了多個套件。這減少了需要編寫的程式碼量,同時提高了可讀性。
以下程式碼將此功能付諸實行:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt.Printf("%d) %d\n", i, rand.Intn(25)) } } |
執行程式碼:
|
1 |
go run practice.go |
輸出結果將會像這樣:

步驟 5 – 安裝額外的 Go 函式庫
Go 的標準函式庫附帶了許多實用的套件。這些套件在設計上都是通用型的。它使開發人員能夠在標準函式庫之上建立自己的套件,以滿足其特定需求。請查看官方的 Go 套件資料庫.
如果您需要實作第三方 Go 套件該怎麼辦?Go 附帶了 go install 指令( go get 已被棄用)。它可以從網際網路獲取任何第三方 Go 套件。
為了進行示範,我們將安裝 cobra-cli 套件。以下 Go 指令將下載並安裝所需的檔案,並將該套件整合到 Go 函式庫系統中:
|
1 |
go install github.com/spf13/cobra-cli@latest |

The binary of cobra-cli 的二進位檔應該位於以下位置:
|
1 |
ls -l $GOPATH/bin |

其他套件檔案應該位於以下位置:
|
1 |
ls -l $GOPATH/pkg/mod/github.com/spf13 |

從 Go v1.11 開始,Go modules 定義了您希望匯入的套件版本。這裡有詳細說明: Go Modules GitHub.
步驟 6 – 套件別名
在各種情況下,您可能會發現本機套件與匯入套件之間的名稱發生衝突。這就是別名可以解決衝突的地方。別名結構看起來像這樣:
|
1 |
import <alias> "import_package_name" |
讓我們修改簡單的 Go 程式,將 fmt_alias 設為套件 fmt 的別名 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( fmt_alias "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt_alias.Printf("%d) %d\n", i, rand.Intn(25)) } } |
請注意,我們沒有使用 fmt.Printf(),而是使用套件別名 fmt_alias.Printf() .
然而,Go 並不那麼歡迎別名。當您使用別名來避免匯入名稱衝突時,建議為最本土化或專案特有的匯入設定別名。例如,如果您希望同時擁有本機套件 strings 和系統套件 strings ,那麼您應該為本機套件設定別名,而不是系統套件。
最佳實踐是從一開始就避免名稱衝突。
步驟 7 – 匯入格式化
我們學會了使用單個 import 語句來宣告所有匯入。如果您有多個匯入該怎麼辦?例如:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import ( "fmt" "os" "github.com/example/foo" "github.com/example/bar" "math/rand" "github.com/abc/pqr/xyz" ) |
匯入格式化會將套件按特定順序排序,從而提高程式碼的一致性。由於它僅對匯入的順序進行排序,因此還可以防止隨機提交。它還能避免不必要的程式碼變動和令人困惑的程式碼審查。
大多數現代編輯器都會自動為您格式化匯入。或者,它們會支援 goimports。在業界中,使用 goimports 來代替手動排序匯入是一種常見的做法。此外, goimports 還能反映程式碼中的樣式變化。
以下是 import 區塊在套用 goimports :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import ( fmt_alias "fmt" "math/rand" "os" "github.com/example/foo" "github.com/example/bar" "github.com/abc/pqr/xyz" ) |
注意到什麼規律了嗎?
- 所有標準函式庫都會先分組在一起。
- 各組之間以空行分隔,提高了程式碼的可讀性。
結語
Go 中的匯入(Imports)是一個強大的功能,允許呼叫非 Go 內建的函式。雖然標準函式庫提供了許多通用套件,但 Go 也支援第三方套件。本指南示範了如何匯入內建和第三方的 Go 套件。
在本指南中,我們使用直譯器執行了 Go 程式。然而,您可以將程式碼編譯為獨立的二進位檔案以獲得更好的效能。您可以了解更多關於 在此編譯 Go 程式 的資訊。如果您想了解如何 使用 Nginx 部署 Go 網頁應用程式,請參考本教學。此外,您可以查看我們展示 如何撰寫您自己的 Go 套件.
您是 Go 開發人員嗎? CloudSigma 提供 Go API 支援 ,以便與您的專案進行無縫整合。
祝您開發愉快!
留言
目前尚無留言。成為第一個留言的人吧。