我想解压缩字符串数组并传递给path.Join
package main
import (
"fmt"
"path"
)
func main() {
p := []string{"a", "b", "c"}
fmt.Println(path.Join(p...))
}
此代码的输出为:
a/b/c
但如果我传递的参数如下:
package main
import (
"fmt"
"path"
)
func main() {
p := []string{"a", "b", "c"}
fmt.Println(path.Join("d", p...))
}
它不起作用。
tmp/sandbox299218161/main.go:10: too many arguments in call to path.Join
have (string, []string...)
want (...string)
我认为我对拆包有误解,有什么建议吗?
答案 0 :(得分:5)
你不是真的误解了什么,你就是不能这样做。 spec说:
如果最终参数可分配给切片类型
[]T
,则如果参数后跟...T
,则可以将其作为...
参数的值保持不变。在这种情况下,不会创建新切片。
简而言之,p...
只能用作参数的整个可变参数部分,因为当您这样做时,它只是重新使用p
作为参数在函数内切片,而不是创建一个新的。
如果你想在开头添加一些参数,你必须首先使用所有参数构建自己的切片,例如:
p := []string{"a", "b", "c"}
p2 := append([]string{"d"}, p...)
fmt.Println(path.Join(p2...))
工作正常并打印“d / a / b / c”。