教程:建立 Go 模組

這是介紹 Go 語言一些基本功能的教程的第一部分。如果您剛開始學習 Go,請務必檢視教程:Go 入門,其中介紹了 go 命令、Go 模組和非常簡單的 Go 程式碼。

在本教程中,您將建立兩個模組。第一個是庫,旨在供其他庫或應用程式匯入。第二個是呼叫者應用程式,它將使用第一個模組。

本教程的序列包括七個簡短的主題,每個主題都闡述了語言的不同部分。

  1. 建立模組——編寫一個帶有函式的小模組,您可以從另一個模組呼叫這些函式。
  2. 從另一個模組呼叫您的程式碼——匯入並使用您的新模組。
  3. 返回並處理錯誤——新增簡單的錯誤處理。
  4. 返回隨機問候語——處理切片(Go 的動態大小陣列)中的資料。
  5. 返回多人的問候語——將鍵/值對儲存在對映中。
  6. 新增測試——使用 Go 的內建單元測試功能測試您的程式碼。
  7. 編譯並安裝應用程式——在本地編譯並安裝您的程式碼。

先決條件

啟動一個可供他人使用的模組

首先建立一個 Go 模組。在一個模組中,您收集一個或多個相關的包,用於一組離散且有用的函式。例如,您可能建立一個帶有用於進行財務分析的函式的包的模組,以便編寫財務應用程式的其他人可以使用您的工作。有關開發模組的更多資訊,請參閱開發和釋出模組

Go 程式碼被分組到包中,包被分組到模組中。您的模組指定執行程式碼所需的依賴項,包括 Go 版本和它所需的其他模組集。

當您在模組中新增或改進功能時,您會發布模組的新版本。編寫程式碼呼叫模組中函式的開發人員可以匯入模組的更新包並使用新版本進行測試,然後再將其投入生產使用。

  1. 開啟命令提示符並 cd 到您的主目錄。

    在 Linux 或 Mac 上

    cd
    

    在 Windows 上

    cd %HOMEPATH%
    
  2. 為您的 Go 模組原始碼建立一個 greetings 目錄。

    例如,從您的主目錄使用以下命令

    mkdir greetings
    cd greetings
    
  3. 使用 go mod init 命令啟動您的模組。

    執行 go mod init 命令,給出您的模組路徑——這裡使用 example.com/greetings。如果您釋出一個模組,這必須是 Go 工具可以下載您的模組的路徑。那將是您的程式碼倉庫。

    有關使用模組路徑命名模組的更多資訊,請參閱管理依賴項

    $ go mod init example.com/greetings
    go: creating new go.mod: module example.com/greetings
    

    go mod init 命令建立一個 go.mod 檔案來跟蹤您的程式碼依賴項。到目前為止,該檔案只包含您的模組名稱和您的程式碼支援的 Go 版本。但隨著您新增依賴項,go.mod 檔案將列出您的程式碼所依賴的版本。這使得構建可重現,並讓您可以直接控制要使用的模組版本。

  4. 在您的文字編輯器中,建立一個檔案來編寫您的程式碼並將其命名為 greetings.go。
  5. 將以下程式碼貼上到您的 greetings.go 檔案中並儲存檔案。
    package greetings
    
    import "fmt"
    
    // Hello returns a greeting for the named person.
    func Hello(name string) string {
        // Return a greeting that embeds the name in a message.
        message := fmt.Sprintf("Hi, %v. Welcome!", name)
        return message
    }
    

    這是您模組的第一段程式碼。它向任何請求問候語的呼叫者返回一個問候語。您將在下一步中編寫呼叫此函式的程式碼。

    在此程式碼中,您

    • 宣告一個 greetings 包以收集相關函式。
    • 實現一個 Hello 函式以返回問候語。

      此函式接受一個型別為 stringname 引數。該函式還返回一個 string。在 Go 中,名稱以大寫字母開頭的函式可以被不在同一個包中的函式呼叫。這在 Go 中稱為匯出名稱。有關匯出名稱的更多資訊,請參閱 Go tour 中的匯出名稱

    • 宣告一個 message 變數來儲存您的問候語。

      在 Go 中,:= 運算子是在一行中宣告和初始化變數的快捷方式(Go 使用右側的值來確定變數的型別)。如果寫成冗長的形式,您可能會這樣寫

      var message string
      message = fmt.Sprintf("Hi, %v. Welcome!", name)
      
    • 使用 fmt 包的 Sprintf 函式建立問候訊息。第一個引數是格式字串,Sprintfname 引數的值替換 %v 格式動詞。插入 name 引數的值完成問候文字。
    • 將格式化的問候文字返回給呼叫者。

在下一步中,您將從另一個模組呼叫此函式。