Golang的不定参数
2018-02-11 14:24
555 查看
转自:http://blog.51cto.com/gotaly/1545952
在很多语言中都提供了不定参数和函数重载以及函数式语言中得闭包来提高函数的灵活性。如果使用过fmt包里的函数,那么你就已经接触到了Golang的不定参数了。那么如何定义一个自己的不定参数的函数呢?
}该函数定义,定义了一个接受任何数目任何类型参数的函数。这里特殊的语法是三个点“...”,在一个变量后面加上三个点后,表示从该处开始接受不定参数,不同于python,golang的不定参数如果将这里"interface{}" 替换成某一确定类型,那么其就只能接受该类型的不定参数。
for _,item := range v {
fmt.Println("item:",item)
}
}
func main() {
var l []string
l = append(l,"a")
l = append(l,"b")
fmt.Println("l is ",l)
P(l...)
}这里我们看到的结果是,首先一个完整的list,然后是每个元素:l is [a b]
item: a
item: b通过配合使用for...range可以遍历不定参数v中得每个参数。这里我们将不定参数类型设为string,因此只能接受若干的string 类型的参数。
在很多语言中都提供了不定参数和函数重载以及函数式语言中得闭包来提高函数的灵活性。如果使用过fmt包里的函数,那么你就已经接触到了Golang的不定参数了。那么如何定义一个自己的不定参数的函数呢?
一、函数定义
首先来看如何定义一个不定参数的函数:func YourFun(v... interface{}){}该函数定义,定义了一个接受任何数目任何类型参数的函数。这里特殊的语法是三个点“...”,在一个变量后面加上三个点后,表示从该处开始接受不定参数,不同于python,golang的不定参数如果将这里"interface{}" 替换成某一确定类型,那么其就只能接受该类型的不定参数。
二、三个点
上面我们看到有三个点"..."的特殊标记。那么这三个点"..."有啥作用呢?2.1 不定参数
如上所述,在定义不定参数时,表示从该参数开始记录不定参数2.2 解引用slice
当要传递若干个值到不定参数函数中得时候,可以手动书写每个参数,也可以将一个slice传递给该函数: YourFunc (YourSlice...)通过"..."可以将slice中得参数对应的传递给函数。相当于python中得“*args”这里要注意的是,解引用slice目前只能在不定参数函数传递参数时使用,在其他地方使用会报错。三、遍历参数
下面我们来看一个实例:func P (v... string) {for _,item := range v {
fmt.Println("item:",item)
}
}
func main() {
var l []string
l = append(l,"a")
l = append(l,"b")
fmt.Println("l is ",l)
P(l...)
}这里我们看到的结果是,首先一个完整的list,然后是每个元素:l is [a b]
item: a
item: b通过配合使用for...range可以遍历不定参数v中得每个参数。这里我们将不定参数类型设为string,因此只能接受若干的string 类型的参数。
相关文章推荐
- Golang 不定参数
- golang不定参数
- 了解golang的不定参数(... parameters),这一篇就够了
- Golang的不定参数
- java不定参数
- golang学习的点点滴滴:可变参数2(interface)
- Java函数的不定参数
- Java不定参数
- C++ 不定参数"..."的使用
- C/C++宏定义中带不定参数
- Python的不定长参数
- 变长参数宏 不定参数宏
- RobotFramework 接口测试-不定参数问题
- C技巧:结构体参数转成不定参数
- Golang 读取操作系统命令行控制台传入的参数列表os.Args的多种方式
- va_arg() 实现不定参数函数 返回参数不匹配问题
- Python函数的不定长参数
- Java 不定长度参数
- 不定参数委托调用定参函数
- 传不定个数参数的函数写法