golang的不定参数怎么传递下去

Python020

golang的不定参数怎么传递下去,第1张

给你个fmt.Printf的例子:

echo 函数不定参数,其调用fmt.Printf进行输出,因为v是一个slice,所以传递给fmt.Printf的时候需要 v...,就类似append(slice1,slice2...)

package main

import (

"fmt"

)

func main() {

echo("Hello %s, I am %s\n", "Bob", "John")

}

func echo(format string, v ... interface{}) {

fmt.Printf(format, v...)

}

现在有个结构体如下定义

我们需要初始化结构体,如果是其他语言,函数支持默认参数:

但是,go语言函数不支持默认参数,同时即使go语言支持默认参数,但是如果配置项过多,那么每一个配置项都得写一个默认参数,也不现实。

那么,在go语言中,我们怎么优雅的给其初始化呢,这时,就需要利用选项模式了(option)。

首先,我们定义一个option函数类型:

它接收一个参数: *Server 。

然后定义一个 NewServer 函数,它接收一个 Option类型的不定参数:

最后,再直接定义一系列返回 Option的函数

使用时,直接:

‘…’ 其实是go的一种语法糖。

它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。

第二个用法是slice可以被打散进行传递。

下面直接上例子:

结果:

其中strss切片内部的元素数量可以是任意个,test1函数都能够接受。

第二个例子:

结果:

如果没有’…’,面对上面的情况,无疑会增加代码量,有了’…’,是不是感觉简洁了许多