七叶笔记 » golang编程 » 可变参数函数golang

可变参数函数golang

可变参数函数(Variadic Functions),就是可以支持任意数量的参数。这些参数需要是相同的类型。最后一个参数的类型,要以省略号开头,也就是三个点“…”, 这意思是,这个函数这里接受任意数量的参数,必须是这个类型的。

当你不知道传入参数的个数时,这种函数是有用的,最熟悉的例子就是print函数,可以接受任意多个参数。

选择传入参数中的单个参数

 package main

import "fmt"

func main() {
variadicExample("red", "blue", "green", "yellow")
}

func variadicExample(s ...string) {
fmt.Println(s[0])
fmt.Println(s[3])
}  

上面的例子中,variadicExample函数接受任意多个参数,在函数体中,只使用其中的某几个参数。可以看出,这里的方法就和访问数组中的变量一样。

可以看出,传入参数的类型,等同于[]T

在这种使用中,像数组一样,如果没有那么多元素,就会出现数组越界的panic。

传入0个或者任意多个参数

 package main

import "fmt"

func main() {

variadicExample()
variadicExample("red", "blue")
variadicExample("red", "blue", "green")
variadicExample("red", "blue", "green", "yellow")
}

func variadicExample(s ...string) {
fmt.Println(s)
}  

输出

 []
[red blue]
[red blue green]
[red blue green yellow]
  

正常的函数参数和可变参数一起使用

 package main

import "fmt"

func main() {
fmt.Println(calculation("Rectangle", 20, 30))
fmt.Println(calculation("Square", 20))
}

func calculation(str string, y ...int) int {

area := 1

for _, val := range y {
if str == "Rectangle" {
area *= val
} else if str == "Square" {
area = val * val
}
}
return area
}  

注意:可变参数,只能放在参数列表的最后一个。

在可变参数中,传入不同的类型

如果要传入不同的类型,需要使用类型 …interface{}

 package main

import (
"fmt"
"reflect"
)

func main() {
variadicExample(1, "red", true, 10.5, []string{"foo", "bar", "baz"},
map[string]int{"apple": 23, "tomato": 13})
}

func variadicExample(i ...interface{}) {
for _, v := range i {
fmt.Println(v, "--", reflect.ValueOf(v).Kind())
}
}  

输出

 1 -- int
red -- string
true -- bool
10.5 -- float64
[foo bar baz] -- slice
map[apple:23 tomato:13] -- map
  

相关文章