可以把函数作为值来传递和使用。Go语言中的函数可以返回多个结果。
func(input1 string ,input2 string) string
函数接受n个参数
func add(a int, arg ...int) int {
var sum int = a
for i := 0; i < len(arg); i++ {
sum += arg[i]
}
return sum
}
func concat(a string, arg ...string) (result string) {
result = a
for i := 0; i < len(arg); i++ {
result += arg[i]
}
return
}
左边加入type关键字和一个标识符作为名称的话,那就变成了一个函数类型声明:
type MyFunc func(input1 string ,input2 string) string{}
结果声明是带名称的,那么它就相当于一个已被声明但未被显式赋值的变量。
我们可以为它赋值且在return语句中省略掉需要返回的结果值。
func myFunc(part1 string, part2 string) (result string) {
result = part1 + part2
return
}
一个函数的参数声明列表和结果声明列表中的数据类型的顺序和名称与某一个函数类型完全一致,前者就是后者的一个实现。
var splice func(string, string) string 等价于 var splice MyFunc
可以在这个变量之上实施调用动作了:splice("1", "2")
匿名函数来初始化splice变量
var splice = func(part1 string, part2 string) string {
return part1 + part2
}
var result = func(part1 string, part2 string) string {
return part1 + part2
}("1", "2")
函数类型的零值是nil。这意味着,一个未被显式赋值的、函数类型的变量的值必为nil。