首页 >后端开发 >Golang >如何正确地将常规切片参数和分解切片参数传递给 Go 中的可变参数函数?

如何正确地将常规切片参数和分解切片参数传递给 Go 中的可变参数函数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 16:24:14316浏览

How Can I Correctly Pass Both Regular and Exploded Slice Arguments to a Variadic Function in Go?

可变参数函数参数:在 Go 中混合“分解”切片和常规参数

Go 编程语言提供了使用可变参数定义函数的能力参数使用“...”语法。这允许函数接受可变数量的参数。然而,理解可变参数的机制对于避免运行时错误至关重要。

在给定的示例中:

func main() {
    stuff := []string{"baz", "bla"}
    foo("bar", stuff...)
}

func foo(s ...string) {
    fmt.Println(s)
}

目的是传递常规参数(“bar”)和foo 函数的“爆炸”切​​片(东西...)。然而,由于“参数太多”,这会导致编译错误。

这种行为的原因在于可变参数的定义。在 Go 中,有两种不同的方法来指定可变参数的参数:

  1. 枚举元素: 切片的每个元素单独传递,用逗号分隔。
  2. 使用现有切片:整个切片,后跟 ...,作为单个传递argument.

不允许在同一个可变参数中混合使用这两种方法。当 stuff... 被传递时,切片本身就成为可变参数的值。因此,它不能与任何枚举元素(如“bar”)共存。

如果预期行为是“爆炸”切​​片,则以下语法是正确的:

foo([]string{"bar"}...)

这将有效扩展为:

foo("bar", "baz", "bla")

总之,在可变参数函数的上下文中将枚举参数与切片混合是不可能的 去。语言规范要求可变参数只能接受单个切片参数,该参数将成为该参数的值。为了实现所需的“爆炸”行为,整个切片必须单独传递,而不需要任何前面的枚举参数。

以上是如何正确地将常规切片参数和分解切片参数传递给 Go 中的可变参数函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn