参数为具有可变参数数量的函数

时间:2014-09-10 12:35:27

标签: go

如何将Golang函数作为可能具有多个参数的参数传递,例如fmt.Printf

第一个问题是必须首先定义要传递的函数的类型。

type FunctionWithVariableArgumentLength func(s string, object1 type1, ..., objectn typen)

第二个问题是,人们不知道列表中的参数可能具有哪些类型,例如fmt.Printf

3 个答案:

答案 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)
}

Demonstration

答案 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/