Go语言中channel,slice,map这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递指针。(注:若函数需改变slice的长度,则仍需要取地址传递指针)
1、slice传参
(1)slice 在函数传参时,使用指针。注意append 操作的“诡异”现象
append,必须传入slice的地址*[]int
类型才行,[]int
时append无效。
modify,传入[]int
和*[]int
都可以,因此[]int
就足够了。
func testModify1(s []int) {//有效
s[0] = 10
}
func testModify2(s *[]int) {//有效
(*s)[0] = 12
}
func testAppend1(s []int) {//无效
s = append(s, 1)
}
func testAppend2(s *[]int) {//有效
*s = append(*s, 1)
}
func main() {
a := []int{1, 3, 4}
testAppend1(a)
fmt.Println(a)
testAppend2(&a)
fmt.Println(a)
testModify1(a)
fmt.Println(a)
testModify2(&a)
fmt.Println(a)
}
输出:
[1 3 4]
[1 3 4 1]
[10 3 4 1]
[12 3 4 1]
参考:
https://blog.csdn.net/wang603603/article/details/121873640
2、map传参
3、channel传参
4、array传参
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。