голанг: путь через платформу.Dir
Я хотел бы использовать path.Dir()
в Unix и Windows с определенным каталогом платформы. Пожалуйста, взгляните на код:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(`path.Dir("a/b/c"): `, path.Dir("a/b/c"))
fmt.Println(`path.Dir("c:foobar.exe"): `, path.Dir(`c:foobar.exe`))
}
Это выводит
path.Dir("a/b/c"): a/b
path.Dir("c:foobar.exe"): .
Я хотел бы получить для второго вызова path.Dir()
(windows) что-то вроде
c:foo
Можно ли сказать path.dir()
, чтобы использовать разделители Windows для моей программы, работающей на windows? Или я всегда должен преобразовывать обратную косую черту в прямую косую черту (
/
)? Какова здесь предпочтительная стратегия?
1 ответ:
Я вижу, где находится "проблема". эта дискуссия в golang-nuts дала мне подсказку, что
path.Dir()
всегда использует/
иfilepath.Dir()
является функцией, которая будет использоваться для зависимых от платформы манипуляций.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`)) }
В windows:
filepath.Dir("a/b/c"): a\b filepath.Dir("c:\foo\bar.exe"): c:\foo