如何在Go中创建跨平台的文件路径?

huangapple go评论122阅读模式
英文:

How do I create crossplatform file paths in Go?

问题

我想在golang中打开一个给定的文件"directory/subdirectory/file.txt"。有没有一种推荐的方式以操作系统无关的方式来表示这样的路径(即在Windows中使用反斜杠,在Mac和Linux中使用正斜杠)?类似于Python的os.path模块?

英文:

I want to open a given file "directory/subdirectory/file.txt" in golang. What is the recommended way to express such a path in an OS agnostic way (ie backslashes in Windows, forward slashes in Mac and Linux)? Something like Python's os.path module?

答案1

得分: 84

要直接创建和操作特定于操作系统的路径,请使用os.PathSeparatorpath/filepath包。

另一种方法是始终在程序中使用'/'path包。path包使用'/'作为路径分隔符,不考虑操作系统。在打开或创建文件之前,通过调用filepath.FromSlash(path string)将以/分隔的路径转换为特定于操作系统的路径字符串。通过调用filepath.ToSlash(path string)可以将操作系统返回的路径转换为以/分隔的路径。

英文:

For creating and manipulating OS-specific paths directly use os.PathSeparator and the path/filepath package.

An alternative method is to always use '/' and the path package throughout your program. The path package uses '/' as path separator irrespective of the OS. Before opening or creating a file, convert the /-separated path into an OS-specific path string by calling filepath.FromSlash(path string). Paths returned by the OS can be converted to /-separated paths by calling filepath.ToSlash(path string).

答案2

得分: 47

使用path/filepath代替pathpath仅适用于正斜杠分隔的路径(例如URL中使用的路径),而path/filepath可在不同操作系统上操作路径。

示例:

  1. package main
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. )
  6. func main() {
  7. path := filepath.Join("home", "hello", "world.txt")
  8. fmt.Println(path)
  9. }

Go Playground: https://go.dev/play/p/2Fpb_vJzvSb

英文:

Use path/filepath instead of path. path is intended for forward slash-separated paths only (such as those used in URLs), while path/filepath manipulates paths across different operating systems.

Example:

  1. package main
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. )
  6. func main() {
  7. path := filepath.Join("home", "hello", "world.txt")
  8. fmt.Println(path)
  9. }

Go Playground: https://go.dev/play/p/2Fpb_vJzvSb

答案3

得分: 22

根据@EvanShaw的回答和这篇博客,创建了以下代码:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. )
  7. func main() {
  8. p := filepath.FromSlash("path/to/file")
  9. fmt.Println("Path: " + p)
  10. }

返回:

  1. Path: path\to\file

在Windows上。
1: https://golangcode.com/cross-platform-file-paths/

英文:

Based on the answer of @EvanShaw and this blog the following code was created:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. )
  7. func main() {
  8. p := filepath.FromSlash("path/to/file")
  9. fmt.Println("Path: " + p)
  10. }

returns:

  1. Path: path\to\file

on Windows.
1: https://golangcode.com/cross-platform-file-paths/

答案4

得分: -5

Go将正斜杠(/)视为在所有平台上的通用分隔符1。无论运行时操作系统如何,"directory/subdirectory/file.txt"都将被正确打开。

英文:

Go treats forward slashes (/) as the universal separator across all platforms [1]. "directory/subdirectory/file.txt" will be opened correctly regardless of the runtime operating system.

huangapple
  • 本文由 发表于 2012年2月21日 09:47:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/9371031.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定