1.函数
1.1函数定义
在go语言中函数定义格式如下:
func functionName([parameter list]) [returnTypes]{
//body
}
- 函数由func关键字进行声明。
- functionName:代表函数名。
- parameter list:代表参数列表,函数的参数是可选的,可以包含参数也可以不包含参数。
- returnTypes:返回值类型,返回值是可选的,可以有返回值,也可以没有返回值。
- body:用于写函数的具体逻辑
例1:
下面的函数是用于求两个数的和
func GetSum(num1 int, num2 int) int {
result := num1 + num2
return result
}
这个函数传递了两个参数,分别为num1
与num2
,并且他们都为int
类型,将相加后的结果进行返回。
上面这个函数还可以这样定义
func GetSum1(num1, num2 int) int {
result := num1 + num2
return result
}
当num1和num2是相同类型的时候我们可以省略掉前面的类型,go编译器会自动进行推断。
1.2值传递与引用传递
因为在go语言中存在值类型与引用类型,所以在函数参数进行传递时也要注意这个问题。
- 值传递是指在函数调用过程中将实参拷贝一份到函数中,这样在函数中如果对参数进行修改,将不会影响到实参。
- 引用传递是指在函数调用过程中将实参的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实参。
如果想要函数可以直接修改参数的值,那么我们可以用指针传递,将变量的地址作为参数传递到函数中。下面的这个例子为大家演示了以上的几种情况。
例2:
func paramFunc(a int, b *int, c []int) {
a = 100
*b = 100
c[1] = 100
fmt.Println("paramFunc:")
fmt.Println(a)
fmt.Println(*b)
fmt.Println(c)
}
func main() {
a := 1
b := 1
c := []int{
1, 2, 3}
paramFunc(a, &b, c)
fmt.Println("main:")
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
程序输出如下
paramFunc:
100
100
[1 100 3]
main:
1
100
[1 1