7 函数
7.1 Go的函数,通过关键字来
func
声明,可以有一个或者多个参数,每个参数后面带有类型,通过","分隔,
可以返回多个值
,使用关键字
return
返回值,格式如下;
func
funcName(input1 type1, input2 type2) (output1 type1, output2 type2) {
//这里是处理逻辑代码
//返回多个值
return value1, value2
}
7.2 对于input,如果类型相同,只需声明一个类型,同理对于返回值,如果类型相同,只需返回一个类型;
7.3 返回值可以省略变量名,只写类型;
7.4 命名返回值的好处是文档可读性更好,见名知义,并且在return时 不必指定返回变量;
7.5 支持变参输入,输入的参数个数不确定,入参是一个slice类型,变参必须放在最后;
7.6 值传递和指针传递
Go使用的是值传递,当我们传递一个参数
value
到被调用的函数中时,其实只是这个值的一份copy,指针传递也是值传递,当然这个时候传递的值是地址,程序要通过改变的是这个地址指向的值,就能改变
value
;
7.7 大多数情况,我们并不需要保留一份copy,而是希望函数对入参有所作为,改变入参,所以传递指针比较合适,而且指针传递的开销比较小,只有8bytes;
7.8 defer是一个延时语句,类似java的try-catch-finally的finally,会在函数退出前调用 defer 后指定的动作,函数体内支持多个defer,执行顺序为后进先出,最后面定义的会最先执行;
输出结果为:321
7.9 函数也是一种变量,可以作为值,类型来传递,使用关键字type,格式如下:
type
typeName
func
(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])
函数类型和实现了该类型的函数,类似java的接口类和实现类的关系,具体的应用也类似,看完实例你就明白了:
输出结果如下:
false
false
value :19 is greater than 10
true
value :8 is less than 10
true
value :9 is less than 10
true
false
7.10 main函数和init函数
这两个函数名是Go保留的函数,init函数可以在所有的pakage中定义,而main只能在mainpackage中定义,具体的调用顺序如下:
Have fun!