函数参数
传参语义
概念
- 参数传递: Go 按值传递;
- 参数变量: 接收调用方实参值的副本;
- 修改调用方变量: 需要传指针或传递引用底层数据的值;
值参数示例
func changeNumber(n int) {
n = 100 // 修改的是参数副本
}
func changeSlice(nums []int) {
nums[0] = 100 // 修改共享的底层数组
nums = append(nums, 2) // 只修改参数副本 nums,不改变调用方 slice 的长度
}
func main() {
n := 1
nums := []int{1}
changeNumber(n)
changeSlice(nums)
println(n) // 1
println(nums[0]) // 100
println(len(nums)) // 1
}
可变参数
概念
- variadic parameter: 使用
...T接收任意数量参数; - 位置限制: 可变参数必须是最后一个参数;
- 函数内部表示: 类型为
[]T;
语法格式
func sum(nums ...int) int { // nums 在函数内部表现为 []int
total := 0
for _, n := range nums {
total += n
}
return total
}