go语言:函数参数传递详解

Posted Golang语言社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言:函数参数传递详解相关的知识,希望对你有一定的参考价值。

1、常规传递

使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响原来实参的值。

例如:

package main
import (
   "fmt"
)
func swap(a int, b int) {
   var temp int
   temp = a
   a = b
   b = temp
}
func main() {
   x := 5
   y := 10
   swap(x, y)
   fmt.Print(x, y)
}

输出结果:5 10

传递给swap的是x,y的值得拷贝,函数对拷贝的值做了交换,但却没有改变x,y的值。

我们还是用上面的的例子,稍作修改如下:

package main
import (
   "fmt"
)
func swap(a *int, b *int) {
   var temp int
   temp = *a
   *a = *b
   *b = temp
}
func main() {
   x := 5
   y := 10
   swap(&x, &y)
   fmt.Print(x, y)
}

输出结果:10 5

3、数组元素作为函数参数

使用数组元素作为函数参数时,其使用方法和普通变量相同,即是一个“值拷贝”。

例:

package main
import (
   "fmt"
)
func function(a int) {
   a += 100
}
func main() {
   var s = [5]int{1, 2, 3, 4, 5}
   function(s[2])
   fmt.Print(s[2])
}

输出结果:3

可以看到将数组元素s[2]的值作为函数的实参,不管对形参做什么操作,实参都没有改变。

4、数组名作为函数参数

和其他语言不同的是,go语言在将数组名作为函数参数的时候,参数传递即是对数组的复制。在形参中对数组元素的修改都不会影响到数组元素原来的值。这个和上面的类似,就不贴代码了,有兴趣的自行编写代码测试下吧。

5、slice作为函数参数

package main
import (
   "fmt"
)
func function(s1 []int) {
   s1[0] += 100
}
func main() {
   var a = [5]int{1, 2, 3, 4, 5}
   var s []int = a[:]
   function(s)
   fmt.Println(s[0])
}

运行结果:101

6、函数作为参数

在go语言中,函数也作为一种数据类型,所以函数也可以作为函数的参数来使用。例如:

package main
import (
   "fmt"
)
func function(a, b int, sum func(int, int) int) {
   fmt.Println(sum(a, b))
}
func sum(a, b int) int {
   return a + b
}
func main() {
   var a, b int = 5, 6
   f := sum
   function(a, b, f)
}

运行结果:11

函数sum作为函数function的形参,而变量f是一个函数类型,作为function()调用时的实参。


社区活动

           


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。



Golang语言社区

ID:Golangweb

游戏服务器架构丨分布式技术丨大数据丨游戏算法学习


以上是关于go语言:函数参数传递详解的主要内容,如果未能解决你的问题,请参考以下文章

go语言:函数参数传递详解

Go语言之方法详解

Go 的几种函数参数传递方式

Golang✔️走进 Go 语言✔️ 第八课 函数

Golang✔️走进 Go 语言✔️ 第八课 函数

Go语言参数传递是传值还是传引用