golang中的可变参数:...interface{}
在 Go 语言中,...interface{}
是用来定义可变参数(variadic parameters)的一种方式。这种类型的参数可以接受任意数量的任何类型的值。当你在一个函数声明中看到 ...interface{}
,这意味着该函数可以接收零个或多个参数,这些参数可以是任何数据类型。
例如,下面是一个使用了 ...interface{}
参数类型的简单函数示例:
package main
import "fmt"
// Example function that accepts any number of arguments of any type.
func printAll(args ...interface{}) {
for _, arg := range args {
fmt.Println(arg)
}
}
func main() {
printAll("Hello", 123, true, []int{1, 2, 3})
}
在这个例子中,printAll
函数可以接受任意数量的参数,并且每个参数都可以是不同的类型。当调用这个函数时,你可以传入任意数量的参数,它们将被当作一个 []interface{}
类型的切片处理。在函数内部,我们可以通过遍历这个切片来访问每一个参数。
需要注意的是,由于所有的参数都被转换为 interface{}
类型,如果需要对参数进行特定的操作,可能需要先进行类型断言以恢复其原始类型。例如,如果你知道某个参数应该是整数类型,你可以这样进行类型断言:
if num, ok := arg.(int); ok {
// 使用 num 进行操作
}
这里,arg.(int)
尝试将 arg
断言为 int
类型。如果成功,ok
将为 true
并且 num
将持有转换后的值;否则,ok
将为 false
。
多用组合、少用继承
基于接口而非实现进行编程