高效掌握go语言形参的四个特性 | 豆包MarsCode AI刷题

57 阅读2分钟

在Go语言中,形参(参数)是指在定义函数或方法时,位于函数声明中参数列表中的变量。形参用于接收调用该函数时传递的实际参数(实参),从而在函数内部对传递进来的数据进行操作。

{CDD55229-5946-4455-B47A-A73C22534A0E}.png 形参的基本特性 值传递:Go语言中所有的参数传递都是值传递,即形参是实际参数的副本。因此,在函数内部修改形参的值不会影响到实参的值。

package main

import "fmt"

func updateValue(val int) {
    val = 10
}

func main() {
    num := 5
    updateValue(num)
    fmt.Println(num) // 输出:5
}

在这个例子中,虽然在 updateValue 函数内部对形参 val 进行了赋值操作,但不会改变外部变量 num 的值,因为 val 是 num 的副本。

指针传递:虽然Go语言是值传递,但可以通过传递指针类型来间接改变实参的值。当使用指针类型作为形参时,传递的是实参的地址,因此在函数内部可以通过指针来修改实参的值。

package main

import "fmt"

func updateValue(ptr *int) {
    *ptr = 10
}

func main() {
    num := 5
    updateValue(&num)
    fmt.Println(num) // 输出:10
}

在这里,updateValue 接收一个 int 类型的指针 ptr,并通过 *ptr 解引用来改变 num 的值,因此输出值会发生变化。

变长参数:Go语言支持在函数中定义可变参数,可以使用 ... 表示。变长参数允许在函数调用时传入任意数量的参数,这些参数在函数内部被当作切片来处理。

package main

import "fmt"

func sum(nums ...int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}

func main() {
    fmt.Println(sum(1, 2, 3)) // 输出:6
    fmt.Println(sum(4, 5, 6, 7)) // 输出:22
}

类型相同的连续形参:当形参类型相同且连续时,可以将类型合并,以简化参数的声明。

func add(a, b, c int) int {
    return a + b + c
}

在这个例子中,a, b, 和 c 都是 int 类型,因此可以将类型合并书写。

写在最后 理解Go语言的形参可以帮助我们更好地管理函数中的数据流。通过了解值传递和指针传递的区别,我们可以决定在不同场景中如何高效地传递和修改数据。此外,变长参数和类型合并的使用可以让函数定义更简洁,提高代码的可读性。

{CDD55229-5946-4455-B47A-A73C22534A0E}.png