本节实现的内容:实现一次调用,为多个传递的用户,分别打招呼的功能。程序描述:实现一个新的函数hellos,传递的参数为多个用户的数组列表,返回值为每个用户对应的打招呼信息。
入参:
- 多用户组成的数组,使用go语言的splice
出参:
- 返回值为map,使用make[key-type]v-type 语句:例如:make[string]string
一、编写服务方代码
package greetings
import (
"errors"
"fmt"
"math/rand"
"time"
)
func Hello(name string) (string,error) {
// 如果没有指定参数名称,返回error
if name == "" {
return "", errors.New("empty name")
}
// 如果参数存在,格式化打招呼消息,进行输出
message := fmt.Sprintf(formatMessage(), name)
return message, nil
}
//********以下为新增的实现为多人打招呼的代码开始************
func Hellos(names []string)(map[string]string,error) {
//定义返回值map
messages := make(map[string]string)
//循环遍历names参数
for _, name := range names {
message, err := Hello(name)
if err != nil {
return nil,err
}
//kv存储
messages[name] = message
}
return messages,nil
}
//********以下为新增的实现为多人打招呼的代码结束************
func init() {
// 设置random的随机种子
rand.Seed(time.Now().UnixNano())
}
func formatMessage() string{
//使用go语言的slice切片,预设三种打招呼方式
format := []string{
"你好: %v",
"hello: %v",
"welcome: %v",
}
//随机返回一种
return format[rand.Intn(len(format))]
}
二、编写调用方代码
package main
import (
"example.com/greetings"
"fmt"
"log"
)
func main() {
names := []string{"zhangsan","lisi","wanger"}
//调用上午定义的函数
hellos, err := greetings.Hellos(names)
if err != nil {
log.Fatal("出现异常,系统退出!")
}
//输出结果
fmt.Println(hellos)
}
三、cd到hello目录下,执行go run Hello.go,验证代码是否正确
四、本章知识点
- 如果我们之前已经发布了hello.go的代码,并且有调用方在使用,此时我们需要新增新的函数,保留老的逻辑,做到向后兼容,否则在之前的代码上直接改动,会对现有的客户端造成影响。go语言中向后兼容的最佳实践,就是新增函数。
- make[k-type]v-type 语言格式可以定义我们常用的map
- 数组的循环遍历中,可以通过“_”符号将不会使用到的变量忽略掉