Go - 第八章 | 隨機返回問候
簡要
在本章節中,你將會更改程式碼,使其不再每次都返回單個問候,而返回幾個預定義的問候消息之一。
開始
- 為此,你將使用
Go
切片。一個片就像是一個數組,但你添加和刪除的項目它的動態調整。它是Go
中最有用的類型之一。你將添加一小片以包含三個問候消息,然後讓你的程式碼隨機返回其中一個消息。- 在
greetings / greetings.go中
,更改程式碼,如下所示。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39package greetings
import (
"errors"
"fmt"
"math/rand"
"time"
)
// Hello returns a greeting for the named person.
func Hello(name string) (string, error) {
// If no name was given, return an error with a message.
if name == "" {
return name, errors.New("empty name")
}
// Create a message using a random format.
message := fmt.Sprintf(randomFormat(), name)
return message, nil
}
// init sets initial values for variables used in the function.
func init() {
rand.Seed(time.Now().UnixNano())
}
// randomFormat returns one of a set of greeting messages. The returned
// message is selected at random.
func randomFormat() string {
// A slice of message formats.
formats := []string{
"Hi, %v. Welcome!",
"Great to see you, %v!",
"Hail, %v! Well met!",
}
// Return a randomly selected message format by specifying
// a random index for the slice of formats.
return formats[rand.Intn(len(formats))]
} - 在此程式碼中,你:
- 添加一個
randomFormat
函數,該函數返回問候消息的隨機選擇的格式。請注意,randomFormat
它以小寫字母開頭,從而使其只能由自己的程序包中的程式碼訪問(換句話說,不會導出)。 - 在中
randomFormat
,聲明formats
具有三種消息格式的切片。聲明切片時,你可以忽略括號中的大小,如下所示:[]string
。這告訴Go
,可以動態調整切片下面的數組大小。 - 使用
math/rand
程序包生成隨機數,以從切片中選擇項目。 - 添加一個
init
函數以rand
將當前時間作為包的種子。init
初始化全局變量後,Go
會在程序啟動時自動執行功能。 - 在中
Hello
,調用randomFormat
函數以獲取要返回的消息的格式,然後將格式和name
值一起使用以創建消息。 - 像以前一樣返回消息(或錯誤)。
- 添加一個
- 在
- 在命令行上,轉到
hello
目錄,然後運行hello.go
確認程式碼可以正常工作。多次運行它,注意問候語已更改。- 哦!不要忘了將
Gladys
的名稱(如果願意,可以添加其他名稱)作為Hellohello.go
中函數調用的參數:greetings.Hello("Gladys")
1
2
3
4
5
6
7
8
9
10
11
12
13$ cd hello
$ go run ./hello.go
Great to see you, J.J.!
$ go run ./hello.go
Hail, J.J.! Well met!
$ go run ./hello.go
Great to see you, J.J.!
$ go run ./hello.go
Great to see you, J.J.!
$ go run ./hello.go
Hi, J.J.. Welcome!
$ go run ./hello.go
Hi, J.J.. Welcome!
- 哦!不要忘了將
過程
單字/句子
單字/句子 | 翻譯 |
---|---|
instead | 代替 |
one of several | 幾個之一 |
predefined | 預定義的 |
slice | 片 |
except | 除了 |
dynamically | 動態地 |
contain | 包含 |
randomly | 隨機地 |
lowercase letter | 小寫字母 |
accessible | 無障礙 |
omit | 忽略 |
brackets | 括號 |
underlying | 底層的 |
math | 數學 |
rand | 蘭德 |
automatically | 自動地 |
needn’t | 不需要 |
結語
這邊教學其重點為「init為函數中使用的變量設置初始值」還有「”math/rand”, “time”」包的使用。
註:以上參考了
Golang Documentation