从零到一开始学习go语言(六)_kv返回值

本文介绍了如何在Go语言中实现一个名为`Hellos`的函数,该函数接收一个包含多个用户名称的数组,并返回一个映射,其中键是用户名称,值是对应的打招呼消息。代码包括异常处理、动态数组处理和向后兼容的设计。调用方通过`greetings.Hellos`调用此功能并打印结果。
摘要由CSDN通过智能技术生成

本节实现的内容:实现一次调用,为多个传递的用户,分别打招呼的功能。程序描述:实现一个新的函数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
  • 数组的循环遍历中,可以通过“_”符号将不会使用到的变量忽略掉

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值