之前章节中有介绍到模块之前调用返回问候语句,两个模块之间进行调用,返回我们基础的问候语句,这里只是说简单的返回我们固定好的语句,这一章节简单的介绍如何随机返回我们的问候语句。
想要做到随机问候语返回,我们需要首先了解到Go slice,它就像一个数组。只是它的大小会随着添加和删除项而动态改变,slice可以说是Go中最有用的类型之一。
代码编写
接下来我们就需要编写代码。
-
修改
greetings代码package greetings import ( "errors" "fmt" "math/rand" "time" ) func Hello(name string) (string, error) { if name == "" { return name, errors.New("empty name") } message := fmt.Sprintf(randomFormat(), name) return message, nil } func init() { rand.Seed(time.Now().UnixNano()) } 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中,声明一个带有三种消息格式的格式数组。当声明一个文案时,在括号中忽略它的大小,就像这样:这告诉Go slice底层数组的大小可以动态更改。 - 使用math/rand包生成从
slice中选择一个字符串的随机数。 - 添加一个
init函数来为rand包播下当前时间的种子。Go在程序启动时,全局变量初始化后自动执行init函数。有关init函数的更多信息,请参见Effective Go。 - 在
Hello中,调用randomFormat函数获得您将返回的消息的格式,然后一起使用格式和名称值来创建消息。 - 像之前一样返回消息(或错误)。
- 添加一个
-
修改
hello代码package main import ( "fmt" "log" "montos.com/greetings" ) func main() { log.SetPrefix("greetings: ") log.SetFlags(0) message, err := greetings.Hello("Gladys") if err != nil { log.Fatal(err) } fmt.Println(message) } -
接下来就可以运行我们的代码了:
[root@montos-prod hello]# go run . Hail, Gladys! Well met! [root@montos-prod hello]# go run . Great to see you, Gladys! [root@montos-prod hello]# go run . Great to see you, Gladys! [root@montos-prod hello]# go run . Hi, Gladys. Welcome! [root@montos-prod hello]# go run . Great to see you, Gladys!
总结
上述就已经完成了随机问候语的产生,主要是利用了
slice类型数据结构,同时还加入了一个随机的函数进行选择文案信息。