参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。
package main
import (
"fmt"
)
func main() {
//1 传参 值传递
x := 5
y := 10
swapValue(x, y)
fmt.Println("值传递", x, y)
//2引用传递
x = 5
y = 10
swap(&x, &y)
fmt.Println("引用传递", x, y)
//3数组元素作为函数参数
var s = [5]int{1, 2, 3, 4, 5}
functionValue(s[2])
fmt.Println("3数组元素作为函数参数", s[2])
//4数组名作为函数参数
// 和其他语言不同的是,go语言在将数组名作为函数参数的时候,
// 参数传递即是对数组的复制。在形参中对数组元素的修改都不会影响到数组元素原来的值。
// 这个和上面的类似,就不贴代码了,有兴趣的自行编写代码测试下吧。
// 5、slice作为函数参数
//在使用slice作为函数参数时,进行参数传递将是一个地址拷贝,即将底层数组的内存地址复制给参数slice。这时,对slice元素的操作就是对底层数组元素的操作
var a = [5]int{1, 2, 3, 4, 5}
var s1 []int = a[:]
function(s1)
fmt.Println("5、slice作为函数参数", s1[0])
//6. 函数作为参数
var a1, b1 int = 5, 6
f := sum
functionFunc(a1, b1, f)
}
func functionFunc(a, b int, sum func(int, int) int) {
fmt.Println("6. 函数作为参数", sum(a, b))
}
func sum(a, b int) int {
return a + b
}
func functionValue(a int) {
a += 100
}
func function(s1 []int) {
s1[0] += 100
}
func swapValue(a int, b int) {
var temp int
temp = a
a = b
b = temp
}
func swap(a *int, b *int) {
var temp int
temp = *a
*a = *b
*b = temp
}
结果:
值传递 5 10
引用传递 10 5
3数组元素作为函数参数 3
5、slice作为函数参数 101
6. 函数作为参数 11