Go语言数组作为函数参数(附带实例)
在 Go 语言中,函数的参数是按值传递的。当调用函数时,每个传递的参数都复制一份再赋值给对应的参数变量,所以函数接收到的并不是原始参数。
使用按值传递参数的方式,在传递较大的数组时,效率较低,而且在函数内部修改数组不影响原始数组。代码如下:
要想改变原始数组可以使用数组指针。代码如下:
例如:
使用按值传递参数的方式,在传递较大的数组时,效率较低,而且在函数内部修改数组不影响原始数组。代码如下:
package main import "fmt" func showName(names [3]string) [3]string { // 定义 showName()函数 names[len(names)-1] = "Jerry" // 修改数组最后一个元素 return names } func main() { // 初始化原始数组 s_names := [3]string{"Tony", "Kelly", "Tom"} // 将数组传递给 showName()函数并输出结果 fmt.Println(showName(s_names)) fmt.Println(s_names) // 输出原始数组 }运行结果如下:
[Tony Kelly Jerry]
[Tony Kelly Tom]
要想改变原始数组可以使用数组指针。代码如下:
package main import "fmt" func showName(names *[3]string) *[3]string { // 定义 showName()函数 names[len(names)-1] = "Jerry" // 修改数组最后一个元素 return names } func main() { // 初始化原始数组 s_names := &[3]string{"Tony", "Kelly", "Tom"} // 将数组传递给 showName()函数并输出结果 fmt.Println(showName(s_names)) fmt.Println(s_names) // 输出原始数组 }运行结果如下:
&[Tony Kelly Jerry]
&[Tony Kelly Jerry]
Go语言传递切片
在 Go 语言中,切片是数组的引用,属于引用类型。如果在调用函数时传递的实参包含引用类型,那么在函数体中就可以通过形参改变实参。例如:
package main import "fmt" func showName(names []string) []string { // 定义 showName()函数 names[len(names)-1] = "Jerry" // 修改切片最后一个元素 return names } func main() { // 定义切片 s_names := []string{"Tony", "Kelly", "Tom"} // 将切片传递给 showName()函数并输出结果 fmt.Println(showName(s_names)) fmt.Println(s_names) // 输出切片 }运行结果如下:
[Tony Kelly Jerry]
[Tony Kelly Jerry]