Go语言:变参函数
chase-wind · · 2791 次点击 · · 开始浏览变参函数:
函数中形式参数的数目通常是确定的,在调用的时候要依次传入与形式参数对应的所有实际参数,但是在某些函数的参数个数可以根据实际需要来确定,这就是变参函数。
Go语言支持不定长变参,但是要注意不定长参数只能作为函数的最后一个参数,不能放在其他参数的前面。函数的声明如下:
Func functionName(variableArgumentName ... dateType) 返回值{
Body
}
不定长变参的实质就是一个切片,可以使用range遍历,例如:
Func f(args ...int){
For _,arg :=range args{
fmt.Println(arg)
}
}
我们熟知的fmt.Print()函数可以传递不同类型的参数,go语言规定,如果希望传递任意类型的变参,变参类型应该制定为空接口类型:interface{}.例如:
Func f(args ... Interface{}){
...
}
Go语言中,空接口可以指向任何数据对象,所以可以使用interface{}定义任意类型变量,同时interface{}也是类型安全的。
例:
package main
import (
"fmt"
)
func main() {
f(2, "Go", 8, "language", 'a', false, 'A', 3.14)
}
func f(args ...interface{}) {
var num = make([]int, 0, 6)
var str = make([]string, 0, 6)
var ch = make([]int32, 0, 6)
var other = make([]interface{}, 0, 6)
for _, arg := range args {
switch v := arg.(type) {
case int:
num = append(num, v)
case string:
str = append(str, v)
case int32:
ch = append(ch, v)
default:
other = append(other, v)
}
}
fmt.Println(num)
fmt.Println(str)
fmt.Println(ch)
fmt.Println(other)
}
输出:
[2 8]
[Go language]
[97 65]
[false 3.14]
变参函数难度不大,多理解理解,跟着写写,然后自己尝试些几个变参函数就可以了
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
变参函数:
函数中形式参数的数目通常是确定的,在调用的时候要依次传入与形式参数对应的所有实际参数,但是在某些函数的参数个数可以根据实际需要来确定,这就是变参函数。
Go语言支持不定长变参,但是要注意不定长参数只能作为函数的最后一个参数,不能放在其他参数的前面。函数的声明如下:
Func functionName(variableArgumentName ... dateType) 返回值{
Body
}
不定长变参的实质就是一个切片,可以使用range遍历,例如:
Func f(args ...int){
For _,arg :=range args{
fmt.Println(arg)
}
}
我们熟知的fmt.Print()函数可以传递不同类型的参数,go语言规定,如果希望传递任意类型的变参,变参类型应该制定为空接口类型:interface{}.例如:
Func f(args ... Interface{}){
...
}
Go语言中,空接口可以指向任何数据对象,所以可以使用interface{}定义任意类型变量,同时interface{}也是类型安全的。
例:
package main
import (
"fmt"
)
func main() {
f(2, "Go", 8, "language", 'a', false, 'A', 3.14)
}
func f(args ...interface{}) {
var num = make([]int, 0, 6)
var str = make([]string, 0, 6)
var ch = make([]int32, 0, 6)
var other = make([]interface{}, 0, 6)
for _, arg := range args {
switch v := arg.(type) {
case int:
num = append(num, v)
case string:
str = append(str, v)
case int32:
ch = append(ch, v)
default:
other = append(other, v)
}
}
fmt.Println(num)
fmt.Println(str)
fmt.Println(ch)
fmt.Println(other)
}
输出:
[2 8]
[Go language]
[97 65]
[false 3.14]
变参函数难度不大,多理解理解,跟着写写,然后自己尝试些几个变参函数就可以了