-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

0

1 Answer 1

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
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.