函数定义
一个函数结构如下:
func function_name( [parameter list] param type ) [return_types] {
函数体
}
参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
函数声明告诉了编译器函数的名称,返回类型,和参数,且必须有一个main函数。
所有的函数参数都是值拷贝传入的,函数参数将不再是函数调用时的原始变量。必要时可以添加指针
函数传参
tips:go语言中没有默认参数
传参方式:
1、接收可变参数
func demo2(a ...int) int { // 参数后面加...表示可变参数
res :=0
for _, value := range a{ // 可变参数在函数体中是切片类型
res += value
}
return res
}
func main() {
res := demo2(1,2)
// slice :=[]int{1,2,3}
// res: = demo(slice...) 如果要直接传切片,只需在后面加...即可
// res := demo2() 只有可变参数时,也可不传参
fmt.Println(res) // 3
}
func demo2(b int, a ...int) // 如果固定参数与可变参数同时出现,可变参数要放在后面
2、多个参数类型简写
func demo2(a, b int) { // a ,b都是int类型
}
函数返回值
1、go函数可以返回多个值
2、如果定义了函数返回值的名称,则在函数体中无需再次声明,并且return时可不写该变量名称
3、返回一个值时,如果有名字,要加括号。如果return了多个值,必须要有括号,并且其中一个值有了名字,则另一个必须也要有。
函数可以作为变量
getSquareRoot := func(x float64) float64 {
return math.Sqrt(x)
}
/* 使用函数 */
fmt.Println(getSquareRoot(9))
go回调函数
func main() {
testCallBack(1, callBack)
testCallBack(2, func(x int) int {
fmt.Printf("我是回调,x:%d\n", x)
return x
})
}
type cb func(int2 int) int
func callBack(x int) int {
fmt.Printf("我是回调,x:%d\n", x)
return x
}
func testCallBack(x int, f cb) {
f(x)
}
函数作为参数
func demo(a,b int, op func(c,d int) int) int {
return op(a,b)
}
func op(a,b int) int {
return a + b
}
res := demo(1,2,op)
fmt.Println(res) // 3
空函数
func (f *Logger) Close() {
}
什么都不做,只为了满足某种条件
本文为原创,转载请注明出处