1 函数的定义
Go语言中的函数定义,需要满足下面的格式:
func eval(a,b int,op string) int
函数定义格式:
- 以
func
关键词开头,参数需要使用括号包围。 - 每个参数的排序同样是:形参在前,类型在后。
- 括号后面是返回值类型,可以有多个返回值,多个返回值使用 逗号 分隔。
- 函数体以花括号包围。
- 每行语句都不需要使用分号结束。
下面是一个典型的函数定义:
func eval (a,b int, op string) int {
var result int
switch op{
case "+":
result = a + b
case "-":
result = a-b
default:
panic ("unsupported operator: "+ op)
}
return result
}
可变参数列表
同样使用...
来代表参数是可变的。使用方法形如:
func sum(values...int) int {
s := 0
for i:=range values {
sum += values[i]
}
return sum
}
传入的可变参数其实是一个数组类型的列表,所以,其取用的方法也就是使用数组的方法。通过
range values
获取数组的大小,通过values[i]
来取其中的某一个元素。
此外,需要说明的是,Go语言中没有什么可选参数,默认参数,重载之类的复杂用法。
2 匿名函数
在Go语言中,省略函数定义时候的函数名,即成功定义了一个匿名函数。匿名函数主要在使用函数的时候,在其他函数内部进行定义。如:
package main
import (
"fmt"
"reflect"
"runtime"
)
func apply(op func(int, int) int,a, b int) int {
fmt.Printf("Calling %s with %d ,%d\n", runtime.FuncForPC(reflect.ValueOf(op).Pointer()).Name(),a,b)
return op(a,b)
}
func main() {
result := apply(func(a int, b int) int {
return a+b
},3,5)
fmt.Printf("调用匿名函数的结果:%d", result)
}
上面的程序中,首先定义了一个函数apply
,该函数接收了一个函数op
作为参数。在使用apply的时候,我们这时候还没有定义OP的内容,那么直接在使用的时候创建一个匿名函数直接作为apply函数的第一个参数。此时,匿名函数的定义体就在apply函数的参数内部。这其实是一种函数式编程的思想。