前言
本篇博文主要介绍Go语言的函数定义以及其使用方法。
声明与使用函数
在Go语言中,声明函数的格式如下:
func function_name([parameter list])[return_types]{ //函数体 }
大家在使用编译器进行开发的时候,比如GoLand,就会发现,你输入func回车结构就自动会出现。这也是Go语言开发非常方便的地方。下面,作者来详细说明上面的参数:
func:函数声明关键字
function_name:函数名
parameter:参数列表,可选项,可以没有参数
return_types:返回值类型,也是可选项
下面,我们来举例说明使用,示例如下(输出3):
func main() { fmt.Println(XaddY(1, 2)) } func XaddY(x, y int) int { return x + y }
返回多个值
在Go语言函数中,如果需要返回多个值,并不需要通过列表或者数组返回,可以单独返回任意多个值。这也是Go语言非常方便的地方,示例如下:
func main() { fmt.Println(XaddYOrXmultiplyY(1, 2)) } func XaddYOrXmultiplyY(x, y int) (int,int) { return x + y, x * y }
这里,我们返回了2个参数,一个是加法值,一个是乘法值。
return可以为空
当Go语言函数有返回值的时候,其return可以为空,但并不是实际没有返回值,而是可以将返回值的顺序直接定义在函数定义中。
下面,我们将上面的返回多个值修改一下,示例如下:
func main() { fmt.Println(XaddYOrXmultiplyY(1, 2)) } func XaddYOrXmultiplyY(x, y int) (a, b int) { a = x + y b = x * y return }
这里,返回值的数据依旧与上面返回值一样,因为作者把返回值的返回顺序已经定义到返回参数中,所以return可以为空。
如果你自己写return语句,也可以修改顺序,比如return b,a。它就会先返回b,再返回a。也就是说,它可以根据定义顺序返回,也可以根据你的顺序返回,只要返回参数类型数量是对的,并不会报错。
函数参数
参数
在Go语言中,参数同样分为实参与形参。什么是实参与形参呢?
实参:在调用函数时,传给形参的实际的数据被称为实际参数。
形参:在调用函数时,用于接收外部传入的数据被称为形式参数。
值传递
值传递是指,在调用函数时将实际参数复制一份传递到函数中。这样在函数中进行修改,对传递的参数不会有任何影响。
比如,我们实现一个交换值的函数,看看效果:
func main() { var x,y int=5,9 exchange(x,y) fmt.Println(x,y) } func exchange(x, y int){ var temp int temp=x x=y y=temp }
运行之后,你会发现控制台还是5,9,x与y的值没有任何的变化。这就是值传递的结构,不会改变原来的变量值。
引用传递
而引用传递,就会改变原来的变量。同样的,我们还是使用其实现数据的交换,示例如下:
func main() { var x, y int = 5, 9 exchange(&x, &y) fmt.Println(x, y) } func exchange(x, y *int) { var temp int temp = *x *x = *y *y = temp }
这个时候,你再运行,其控制台会输出9,5,因为是引用传递,所以改变了原来的参数值。
可选函数
顾名思义,就是可要可不要,可长可短的参数。定义可选函数的示例如下:
func main() { var x = []int{2, 3} fmt.Println(x) } func exchange(arg ...int) { var temp int temp = arg[0] arg[0] = arg[1] arg[1] = temp }
注意,arg是一个int的切片,它可以直接通过for-range进行遍历。