Go语言函数参数

Go语言函数参数教程

Go 语言函数 的参数,为形式参数,即如果我们通过传值的方式,传递的参数其实是实际参数的一份拷贝,而不是真正的实际参数。

在 Go 语言中,如果相邻的几个函数参数的类型相同,那么我们可以省略前几个参数的类型,只需要写最后一个参数的类型即可。

Go语言函数参数类型相同详解

定义

func funcName(param1, param2 paramType1, param3, param4 paramType2, ...)(returnVal returnType){ // 执行语句... return 返回值列表 }

说明

参数 param1 和参数 param2 的类型相同,那么我们就可以省略 param1 后面的参数类型,直接在 param2 后面写类型。

参数 param3 和参数 param4 的类型相同,那么我们就可以省略 param3 后面的参数类型,直接在 param4 后面写类型。

案例

寻找最大数

用函数,实现寻找两个数的最大公约数

package main import ( "fmt" ) func gcdNormal(x, y int) int { var n int if x > y { n = y } else { n = x } for i := n; i >= 1; i-- { if x%i == 0 && y%i == 0 { return i } } return 1 } func main() { fmt.Println("嗨客网(www.haicoder.net)") //用函数,实现计算两个数的最大公约数 gcd := gcdNormal(10,20) fmt.Println("Gcd =", gcd) }

程序运行后,控制台输出如下:

04_golang函数形参.png

我们定义了一个函数 gcdNormal,传入两个 int 类型 的参数 a 和 b,函数返回一个 int 类型的 变量。该函数使用了穷举法实现了求参数 a 和 参数 b 的最大公约数的逻辑,因为参数 a 和参数 b 的类型都是 int 类型,因此我们省略了参数 a 后面的类型,直接写在参数 b 后面。

在 main() 函数里面,我们调用了 gcdNormal 函数,并传入了两个参数 10 和 20,使用 gcd 变量来接受 gcdNormal 函数返回的值,最后使用 Println() 函数打印最后的结果。

函数参数是形参

Go 语言的函数参数是函数参数,对函数参数的修改不会影响实参

package main import ( "fmt" ) func change(a int) { a += 100 } func main() { fmt.Println("嗨客网(www.haicoder.net)") //Go语言的函数参数是函数参数,对函数参数的修改不会影响实参 a := 10 change(a) fmt.Println("a =", a) }

程序运行后,控制台输出如下:

05_golang函数形参.png

我们定义了一个函数 change(),传入一个 int 类型的参数 a,在函数体中,对该函数的参数实现加 100 的操作。

在 main() 函数中,调用该函数,并传入变量 a,执行完 change() 函数之后,我们再次打印变量 a 的值,发现 a 的值还是10,并不是加 100 之后的 110。

因为在 Go语言中,函数的参数是形式参数,即是实参的拷贝,所以修改的不是实参,所以 a 的值不会改变。

通过函数参数修改实参

Go 语言的函数要通过函数参数修改实参,必须要使用指针类型

package main import ( "fmt" ) func change(a *int) { *a += 100 } func main() { fmt.Println("嗨客网(www.haicoder.net)") //Go语言的函数要通过函数参数修改实参,必须要使用指针类型 a := 10 change(&a) fmt.Println("a =", a) }

程序运行后,控制台输出如下:

06_golang函数形参.png

我们定义了一个函数 change(),传入一个 int 指针类型的参数 a,在函数体中,对该函数的参数实现加 100 的操作。

在 main() 函数中,调用该函数,并传入变量 a 的地址,执行完 change() 函数之后,我们再次打印变量 a 的值,发现 a 的值被增加了 100 变成了 110。

这里的 change() 函数因为传入的是 a 的地址,接着我们在 change() 函数里面通过指针运算符,获取 a 的地址所指向的变量,再修改其值,其实修改的就是变量 a 本身的值。

Go语言函数参数总结

Go 语言中函数的参数,为形式参数,即如果我们通过传值的方式,传递的参数其实是实际参数的一份拷贝,而不是真正的实际参数。

在 Go 语言中,如果相邻的几个函数参数的类型相同,那么我们可以省略前几个参数的类型,只需要写最后一个参数的类型即可。