可变参数函数参数:在 Go 中混合“分解”切片和常规参数
Go 编程语言提供了使用可变参数定义函数的能力参数使用“...”语法。这允许函数接受可变数量的参数。然而,理解可变参数的机制对于避免运行时错误至关重要。
在给定的示例中:
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) } func foo(s ...string) { fmt.Println(s) }
目的是传递常规参数(“bar”)和foo 函数的“爆炸”切片(东西...)。然而,由于“参数太多”,这会导致编译错误。
这种行为的原因在于可变参数的定义。在 Go 中,有两种不同的方法来指定可变参数的参数:
不允许在同一个可变参数中混合使用这两种方法。当 stuff... 被传递时,切片本身就成为可变参数的值。因此,它不能与任何枚举元素(如“bar”)共存。
如果预期行为是“爆炸”切片,则以下语法是正确的:
foo([]string{"bar"}...)
这将有效扩展为:
foo("bar", "baz", "bla")
总之,在可变参数函数的上下文中将枚举参数与切片混合是不可能的 去。语言规范要求可变参数只能接受单个切片参数,该参数将成为该参数的值。为了实现所需的“爆炸”行为,整个切片必须单独传递,而不需要任何前面的枚举参数。
以上是如何正确地将常规切片参数和分解切片参数传递给 Go 中的可变参数函数?的详细内容。更多信息请关注PHP中文网其他相关文章!