我需要从patients.json引用patients.go,这是文件夹结构:

如果我做:
filepath.Abs("../../conf/patients.json")
它适用于go test ./...,但不适用于revel run
如果我做:
filepath.Abs("conf/patients.json")
完全相反(发生情况很好,但测试失败)。

有没有一种方法可以正确引用该文件,使其既可以用于测试又可以正常运行程序?

最佳答案

相对路径始终被解释/解析为基本路径:当前目录或工作目录-因此它将始终具有其局限性。

如果您可以始终注意正确的工作目录,则可以继续使用相对路径。

我建议的是不要依赖工作目录,而要依赖显式指定的基本路径。这可能在您的应用程序(也可能是工作目录)中具有一个硬编码的默认值,并且您应该提供几种方法来覆盖它的值。

建议的方法来覆盖您的“相对”路径所针对的基本路径:

  • 命令行标志(请参阅 flag 软件包)
  • 环境变量(请参阅 os.Getenv() )
  • (固定名称)用户主目录中的配置文件(请参见 os/user/User os/user/Current() )

  • 一旦有了基本路径,就可以通过合并基本路径和相对路径来获得完整路径。您可以使用 path.Join() filepath.Join() ,例如:
    // Get base path, from any or from the combination of the above mentioned solutions
    base := "/var/myapp"
    
    // Relative path, resource to read/write from:
    relf := "conf/patients.json"
    
    // Full path that identifies the resource:
    full := filepath.Join(base, relf) // full will be "/var/myapp/conf/patients.json"
    

    关于go - 如何从代码和测试中引用相对文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31059023/

    10-14 03:57