📜  Golang 中的函数参数(1)

📅  最后修改于: 2023-12-03 15:01:02.012000             🧑  作者: Mango

Golang中的函数参数

在Golang中,函数参数是指在函数调用时传递给该函数的值。函数在声明时可以定义0个或多个参数,这些参数可以是基本类型、引用类型、指针类型、结构体类型等。

函数参数的声明语法

函数参数的声明语法如下:

func function_name(parameter_list) (result_list) {
   // 函数体
}

其中,parameter_list为参数列表,包括参数名和参数类型;result_list为函数返回值列表,包括返回值类型和名称,可以为空。

例如,以下代码定义了一个带有两个参数和一个返回值的函数:

func add(x int, y int) int {
    return x + y
}

在上面的代码中,add函数有两个参数xy,类型都为int,返回类型也为int

函数参数的传递方式

在函数调用时,可以通过值传递、指针传递或引用传递三种方式来传递函数参数。

值传递

当函数参数是基本类型(如int、float、bool等)时,采用值传递方式,即将实参的副本传递给函数。对形参进行修改不会影响实参的值。

例如,以下代码会打印出1,而不是0

func setValue(x int) {
    x = 1
}

func main() {
    a := 0
    setValue(a)
    fmt.Println(a)
}
指针传递

当函数参数是指针类型时,采用指针传递方式,即将实参的地址传递给函数。在函数内部可以通过指针来操作实参,对形参进行修改会影响实参的值。

例如,以下代码会打印出1

func setValuePtr(x *int) {
    *x = 1
}

func main() {
    a := 0
    setValuePtr(&a)
    fmt.Println(a)
}
引用传递

Golang中没有引用传递的语法,但是可以通过指针来实现引用传递的效果,即将指针传递给函数,并在函数内部通过指针来操作实参。

例如,以下代码会打印出[1 2]

func appendItem(slice *[]int, item int) {
    *slice = append(*slice, item)
}

func main() {
    a := []int{1}
    appendItem(&a, 2)
    fmt.Println(a)
}
可变参数函数

Golang支持定义可变参数函数,即函数参数数量是可变的。可变参数函数使用省略号(...)来定义最后一个参数,可以接收0个或多个参数。

例如,以下代码定义了一个可变参数函数sum,用于计算任意数量整数的和:

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

在上面的代码中,参数nums是一个整数类型的可变参数,它可以接收任意数量的整数类型参数。下面是该函数的调用示例:

sum(1, 2, 3) // 返回6
sum(1, 2, 3, 4, 5) // 返回15
总结

本文介绍了Golang中的函数参数的声明语法、传递方式,以及可变参数函数的定义和使用。在使用函数时,需要了解函数参数的类型、传递方式,以及函数调用的返回值类型。