教學課程:建立 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 導覽中的 匯出名稱

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

      在 Go 中,:= 營運子是宣告和初始化變數於一行中的捷徑(Go 使用右邊的值來判斷變數的型別)。使用長的方式,您可能會這樣撰寫

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

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