将数组解压缩为path.Join的参数

时间:2017-08-19 03:00:20

标签: go

我想解压缩字符串数组并传递给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)

我认为我对拆包有误解,有什么建议吗?

1 个答案:

答案 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”。