Как создать кроссплатформенный путь к файлу в Go? - PullRequest
48 голосов
/ 21 февраля 2012

Я хочу открыть данный файл "directory/subdirectory/file.txt" в golang.Каков рекомендуемый способ выразить такой путь независимым от ОС способом (т. Е. Обратный слеш в Windows, прямой слэш в Mac и Linux)?Что-то вроде модуля Python os.path?

Ответы [ 4 ]

45 голосов
/ 21 февраля 2012

Для создания и управления путями, специфичными для ОС, непосредственно используйте os.PathSeparator и пакет path/filepath.

Альтернативный метод - всегда использовать '/' и path в вашей программе.Пакет path использует '/' в качестве разделителя пути независимо от ОС.Перед открытием или созданием файла преобразуйте / -разделенный путь в строку пути, специфичную для ОС, вызвав filepath.FromSlash(path string).Пути, возвращаемые ОС, можно преобразовать в / -разделенные пути, вызвав filepath.ToSlash(path string).

21 голосов
/ 21 февраля 2012

Используйте path/filepath вместо path. path предназначен только для путей, разделенных косой чертой (например, используемых в URL), тогда как path/filepath управляет путями в разных операционных системах.

8 голосов
/ 27 мая 2018

На основе ответов @EvanShaw и этого блога был создан следующий код:

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func main() {
    p := filepath.FromSlash("path/to/file")
    fmt.Println("Path: " + p)
}

возвращает:

Path: path\to\file

в Windows.

0 голосов
/ 21 февраля 2012

Go рассматривает косую черту (/) как универсальный разделитель для всех платформ [1] ."directory/subdirectory/file.txt" будет открыто правильно независимо от операционной системы времени выполнения.

...