在Go语言中,形参(参数)是指在定义函数或方法时,位于函数声明中参数列表中的变量。形参用于接收调用该函数时传递的实际参数(实参),从而在函数内部对传递进来的数据进行操作。
形参的基本特性
值传递: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语言的形参可以帮助我们更好地管理函数中的数据流。通过了解值传递和指针传递的区别,我们可以决定在不同场景中如何高效地传递和修改数据。此外,变长参数和类型合并的使用可以让函数定义更简洁,提高代码的可读性。