Я хочу открыть заданный файл "directory/subdirectory/file.txt"
в golang. Каков рекомендуемый способ выражения такого пути в агностическом режиме ОС (например, обратные косые черты в Windows, пересылки в Mac и Linux)? Что-то вроде Python os.path
module?
Как создать межплатформенные пути файлов в Go?
Ответ 1
Для создания и управления специфичными для ОС путями используйте os.PathSeparator
и path/filepath
.
Альтернативный метод - всегда использовать '/'
и path
пакет в вашей программе. Пакет path
использует '/'
как разделитель путей независимо от ОС. Перед открытием или созданием файла конвертируйте/-сепаратированный путь в строку пути к конкретной ОС, вызывая filepath.FromSlash(path string)
. Пути, возвращаемые ОС, могут быть преобразованы в/-сепарализованные пути, вызвав filepath.ToSlash(path string)
.
Ответ 2
Используйте path/filepath
вместо path
, path
предназначен только для прямых путей, разделенных косой чертой (например, те, которые используются в URL-адресах), а path/filepath
управляет путями в разных операционных системах.
Ответ 3
На основе ответа @EvanShaw и этого блога был создан следующий код:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
p := filepath.FromSlash("path/to/file")
fmt.Println("Path: " + p)
}
возвращает:
Path: path\to\file
на винде.
Ответ 4
Go рассматривает косые черты() как универсальный разделитель для всех платформ [1]. "directory/subdirectory/file.txt"
будет открыт правильно независимо от операционной системы времени выполнения.