如何将Golang函数作为可能具有多个参数的参数传递,例如fmt.Printf
?
第一个问题是必须首先定义要传递的函数的类型。
type FunctionWithVariableArgumentLength func(s string, object1 type1, ..., objectn typen)
第二个问题是,人们不知道列表中的参数可能具有哪些类型,例如fmt.Printf
。
答案 0 :(得分:4)
有其他功能的原型:http://golang.org/pkg/fmt/#Printf
所以你可以定义你的函数接受一个函数作为这样的参数:
func exe(f func(string, ...interface{}) (int, error)) {
f("test %d", 23)
}
func main() {
exe(fmt.Printf)
}
答案 1 :(得分:2)
您将使用与fmt.Printf
func yourFunction(a ...interface{})
答案 2 :(得分:2)
回答第一部分:用可变数量的参数编写函数。
// sums returns the total of a variable number of arguments
func sum(numbers ...int) total int {
total = 0
for _, n := range numbers {
total += n
}
return total
}
第二部分更难,但功能定义如下:
func doVarArgs(fmt string, a ...interface{}) {
变量a
包含interface{}
类型的值切片。然后迭代切片,拉出每个参数并使用包#34;反映"查询每个参数的类型。
有关完整说明,请参阅http://golang.org/pkg/reflect/。