Go 不允许在可变参数函数中混合“爆炸”切片和常规参数。这在以下示例中很明显:
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) // Error: too many arguments in call to foo } func foo(s ...string) { fmt.Println(s) }
根据 Go 语言规范,可以通过两种方式指定可变长度参数:枚举元素或使用现有切片。不允许混合两者。
枚举元素时,会创建一个新切片,其中元素将成为可变参数的值。但是,当现有切片与...一起使用时,不会创建新切片,并且原始切片将成为可变参数。
同时传递单个元素和切片将导致类型不匹配,从而导致编译器错误。混合这两个选项需要分配一个新的切片,但 Go 不支持这种行为。
错误消息“too much argument in call to foo”表明编译器需要单个切片或元素列表,但不是两者的组合。要解决此问题,请删除内容...或单独枚举元素。
以上是为什么我不能在 Go 的可变参数函数中混合'分解”切片和常规参数?的详细内容。更多信息请关注PHP中文网其他相关文章!