跳到主要内容

函数参数

传参语义

概念

  • 参数传递: 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
}