func Min(ints ...int) int {
//ints类型为[]int{},值是传递进来的值。
if len(ints) == 0 {
return -1
}
min := ints[0]
for _, x := range ints {
if x < min {
min = x
}
}
return min
}
//调用
fmt.Println(Min(4, 6, 9, 10, 3, 2))
arr := []int{9, 5, 3, 10, 20, 2}
fmt.Println(Min(arr...))
上面介绍的是传入多个相同类型的情况,那如果不同类型的多个怎么定义呢?
有两种方法,第一种是通过定义一个新的struct,包含这些不同的类型,然后把这个struct类型作为输入参数;第二种是使用空的Interface。
主要介绍第二种
func PrintType(variables ...interface{}) {
for _, v := range variables {
switch v.(type) {
case int:
fmt.Println("type is int %d", v)
default:
fmt.Println("other type %v", v)
}
}
}
func showFunctionMultiInterfaceParameters() {
lemon.PrintType(5, "aaaa")
var2 := []interface{}{6, 7, 9, "bbb", "ccc"}
lemon.PrintType(var2...)
}
注:需要在方法内部判断类型,之后进行操作。
func DeferOrder() {
for i := 0; i < 4; i++ {
defer fmt.Println("index value is %d", i)
}
}
//输出
index value is %d 3
index value is %d 2
index value is %d 1
index value is %d 0 method
method是特殊的function,定义在某一特定的类型上,通过类型的实例来进行调用,这个实例被叫receiver。
receiver类型可以是任意类型,包括function类型,但是,receiver不能是interface类型。