Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

golang: cross platform path.Dir

Tags:

path

windows

go

I'd like to use path.Dir() on Unix and Windows with a platform specific directory. Please take a look at the code:

package main

import (
    "fmt"
    "path"
)

func main() {
    fmt.Println(`path.Dir("a/b/c"): `, path.Dir("a/b/c"))
    fmt.Println(`path.Dir("c:\foo\bar.exe"): `, path.Dir(`c:\foo\bar.exe`))
}

This outputs

path.Dir("a/b/c"):  a/b
path.Dir("c:\foo\bar.exe"):  .

I'd like to get for the second call to path.Dir() (windows) something like

c:\foo

Is it possible to tell path.dir() to use Windows separators for my program running on windows? Or should I always convert the backslashes \ to forward slashes (/)? What is the preferred strategy here?

like image 603
topskip Avatar asked Aug 26 '12 17:08

topskip


1 Answers

I see where the "problem" is. This discussion at golang-nuts gave me the hint, that path.Dir() always uses / and filepath.Dir() is the function to be used for platform dependent manipulation.

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    fmt.Println(`filepath.Dir("a/b/c"): `, filepath.Dir("a/b/c"))
    fmt.Println(`filepath.Dir("c:\foo\bar.exe"): `, filepath.Dir(`c:\foo\bar.exe`))
}

on windows:

filepath.Dir("a/b/c"):  a\b
filepath.Dir("c:\foo\bar.exe"):  c:\foo
like image 179
topskip Avatar answered Nov 04 '22 06:11

topskip