首页 > 编程笔记 > Go语言笔记 阅读:11

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]

在上述代码中,将切片作为函数的实参进行传递。由运行结果可以看出,修改传入切片将直接影响定义切片的原始值。

相关文章