go 函数参数不限定个数和类型的使用

本文介绍了如何在Go语言中封装函数来处理不限参数个数和类型的调用,特别是针对如redis.Do方法的情况。通过将命令字符串转换为`[]interface{}`类型,实现了将命令串参数解析并适配到函数调用的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当遇到不限参数个数和类型的函数时,比如redis的Do方法,为了方便调用我们一般会封装一个同一的入口,参数均为命令串,然后再将命令串参数解析成Do函数的参数类型进行调用,这里简单记录一下这类参数的处理过程

调用的函数定义如下,从第二个参数起可以传任意多个不限类型的参数,params类型为[]interface{}

Do(commandName string, params ...interface{}) (reply interface{}, err error)

封装成统一的命令执行入口,这里有关参数转换的主要逻辑是

  • 从命令串中获取参数部分cmdArgs,类型为[]string
  • 将cmdArgs转换为args,注意[]string不能实现[]interface{},但是任意类型都可以实现{}interface,所以需要遍历cmdArgs将其元素均以interface{}表示来完成转换
  • args… 相当于将列表中的元素读取出来作为单独的参数传进去
func RedisCmdExec(serverType string, port int32, cmd string) (reply []byte, err error) {
	...
    // 解析命令,将命令转换为cmd和参数两部分
	cmdConv := strings.Fields(cmd)
	// cmdArgs := strings.Join(cmdConv[1:], " ")
	cmdArgs := cmdConv[1:]
	cmdHead := cmdConv[0]
	// 将[]string转换为[]interface{}
	args := make([]interface{}, 0)
	if len(cmdArgs) > 0 {
		for _, arg := range cmdArgs {
			args = append(args, arg)
		}
	}
	reply, err = con.Do(cmd, args...)
	return reply, err
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值