Я хочу открыть заданный файл "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" будет открыт правильно независимо от операционной системы времени выполнения.