• English
  • 返回隨機問候

    注意: 本文是系列教學的一部分,該系列始於 建立 Go 模組

    在本節中,你將更改程式碼,使其不再每次都返回相同的問候語,而是返回幾個預定義問候語中的一個。

    為此,你將使用 Go 切片。切片類似於陣列,但其大小會隨著加入和刪除項目而動態變化。切片是 Go 中最有用的型別之一。

    你將加入一個包含三個問候語的小切片,然後讓你的程式碼隨機返回其中一條訊息。有關切片的更多資訊,請參閱 Go 部落格上的 Go 切片

    步驟

    1. 修改 greetings/greetings.go 以返回隨機問候

    greetings/greetings.go 中,更改你的程式碼,使其看起來如下所示。

    package greetings
    
    import (
        "errors"
        "fmt"
        "math/rand"
    )
    
    // Hello 返回指定人的問候語。
    func Hello(name string) (string, error) {
        // 如果沒有提供名字,則返回帶有訊息的錯誤。
        if name == "" {
            return name, errors.New("empty name")
        }
        // 使用隨機格式建立訊息。
        message := fmt.Sprintf(randomFormat(), name)
        return message, nil
    }
    
    // randomFormat 返回一組問候語訊息中的一個。返回的訊息是隨機選擇的。
    func randomFormat() string {
        // 訊息格式的切片。
        formats := []string{
            "Hi, %v. Welcome!",
            "Great to see you, %v!",
            "Hail, %v! Well met!",
        }
    
        // 透過指定格式切片的隨機索引來返回隨機選擇的訊息格式。
        return formats[rand.Intn(len(formats))]
    }

    在這段程式碼中,你:

    • 加入了一個 randomFormat 函數,該函數返回一個隨機選擇的問候語格式。注意,randomFormat 以小寫字母開頭,使其僅對其所在套件中的程式碼可訪問(換句話說,它未匯出)。
    • randomFormat 中,宣告一個包含三種訊息格式的 formats 切片。宣告切片時,省略括號中的大小,像這樣:[]string。這告訴 Go,切片底層陣列的大小可以動態更改。
    • 使用 math/rand 套件 產生一個隨機數,用於從切片中選擇一個項目。
    • Hello 中,呼叫 randomFormat 函數以取得你將返回的訊息的格式,然後將格式和 name 值一起用於建立訊息。
    • 像以前一樣返回訊息(或錯誤)。

    2. 更新 hello/hello.go 以使用 "Gladys" 這個名字

    hello/hello.go 中,更改你的程式碼,使其看起來如下所示。

    你只需在 hello.go 中的 Hello 函數呼叫中加入 Gladys 的名字(或你喜歡的其他名字)作為參數。

    package main
    
    import (
        "fmt"
        "log"
    
        "example.com/greetings"
    )
    
    func main() {
        // 設定預定義 Logger 的屬性,包括日誌條目前綴和一個停用列印時間、來源檔案和行號的標誌。
        log.SetPrefix("greetings: ")
        log.SetFlags(0)
    
        // 請求問候語。
        message, err := greetings.Hello("Gladys")
        // 如果返回了錯誤,則將其列印到主控台並退出程式。
        if err != nil {
            log.Fatal(err)
        }
    
        // 如果沒有返回錯誤,則將返回的訊息列印到主控台。
        fmt.Println(message)
    }

    3. 執行 hello.go 以確認程式碼正常工作

    hello 目錄的命令列中,執行 hello.go 以確認程式碼正常工作。多次執行,注意問候語的變化。

    $ go run .
    Great to see you, Gladys!
    
    $ go run .
    Hi, Gladys. Welcome!
    
    $ go run .
    Hail, Gladys! Well met!

    結論

    接下來,你將使用切片來問候多個人。