-2

I have code where I am calling filepath.Join as described in the following program. However, I see an error

Program:

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    myVal := joinPath("dir1", "dir2")
    fmt.Println(myVal)
}

func joinPath(dirs ...string) string {
    return filepath.Join("mydir", dirs...)
}

Error: ./prog.go:16:32: too many arguments in call to filepath.Join have (string, []string) want (...string)

While I know this is a legitimate error, how do I join the path with a default parent directory using Join

icza
  • 389,944
  • 63
  • 907
  • 827
Alwin Doss
  • 962
  • 2
  • 16
  • 33

1 Answers1

2

You can't mix a slice and explicit elements for a variadic parameter, for details, see mixing "exploded" slices and regular parameters in variadic functions

However, in your special case you may call filepath.Join() twice, and get the same result:

func joinPath(dirs ...string) string {
    return filepath.Join("mydir", filepath.Join(dirs...))
}

You may also prepare a slice with all elements, and pass that like this:

func joinPath(dirs ...string) string {
    return filepath.Join(append([]string{"mydir"}, dirs...)...)
}

Both will return and output (try them on the Go Playground):

mydir/dir1/dir2
icza
  • 389,944
  • 63
  • 907
  • 827