3 回答

TA贡献1817条经验 获得超6个赞
可变参数的值可以通过枚举元素或使用现有切片指定,由其名称后跟...
.
您想要混合 Go 语言规范(将...
参数传递给参数)不允许的 2 种可能方式。
如果使用第一种形式(枚举元素):
传递的值 [作为可变参数] 是一个新的类型切片,
[]T
带有一个新的底层数组,其连续元素是实际参数。
如果使用后者(传递现有切片,然后是...
),则不会创建新切片,则按原样使用您传递的切片。而通过分片只能用于指定的值一个-在最后-可变参数的参数。尝试同时传递单个元素和切片将与函数的签名(在本例中为参数列表)不匹配,并且您将收到错误消息:
too many arguments in call to foo
Go 中没有实际的“爆炸”,该术语仅在其他语言中使用,以帮助形象化传递的数组或切片将不是可变参数的元素,而是可变参数本身的值。
混合 2 需要分配一个新的切片,因为显然不能使用现有的切片。

TA贡献1859条经验 获得超6个赞
对此的规范在“将...
参数传递给参数”:
如果
f
是带有最终参数p
type 的可变参数...T
,则在f
类型 ofp
内等效于 type[]T
。
如果f
在没有实际参数的情况下调用p
,则传递给的p
值为nil
。
否则,传递的值是一个新的类型切片,[]T
带有一个新的底层数组,其连续元素是实际参数,所有参数都必须分配给T
。
在你的情况下,东西......在哪里工作:
如果最后一个参数可分配给切片类型
[]T
,则...T
如果参数后跟...
. 在这种情况下,不会创建新切片。
但"bar", stuff...
不匹配上面指定的任何一种情况。
T, []T
不匹配f([]T)
。
- 3 回答
- 0 关注
- 210 浏览
添加回答
举报