首页 > 解决方案 > 在golang中使用可变参数切片调用函数

问题描述

直接来自https://gobyexample.com/variadic-functions

对于这部分 sum(nums...),为什么我不能做 sum(nums) ?我不能只将切片传递给函数吗?

func sum(nums ...int) {
    fmt.Print(nums, " ")
    total := 0
    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}
func main() {

    sum(1, 2)
    sum(1, 2, 3)

    nums := []int{1, 2, 3, 4}
    sum(nums...)
}

标签: go

解决方案


您可以将切片传递给采用切片的函数:

func sumSlice(nums []int) --> takes a slice
func sumVariadic(nums ...int) --> variadic

不同之处在于,在第一个中,切片头被传递给函数,而在第二个中,切片的各个元素被传递。您可以将它们用作:

sumSlice([]int{1,2,3})
sumVariadic(1,2,3)

推荐阅读