为了账号安全,请及时绑定邮箱和手机立即绑定

如何从代码和测试中引用相对文件

如何从代码和测试中引用相对文件

Go
有只小跳蛙 2019-10-12 13:55:18
我需要引用patients.json从patients.go,这里的文件夹结构:如果我做:filepath.Abs("../../conf/patients.json")它适用于go test ./...但失败revel run如果我做:filepath.Abs("conf/patients.json")完全相反(发生情况很好,但测试失败)。有没有一种方法可以正确引用该文件,使其既可以用于测试又可以正常运行程序?
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

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


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


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


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


命令行标志(请参阅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"


查看完整回答
反对 回复 2019-10-12
?
烙印99

TA贡献1829条经验 获得超13个赞

这不是路径问题,而是设计问题。


您应该更仔细地设计代码。


据我所知,您在测试文件中共享相同的路径并显示运行。我想也许您json不建议在模型包中硬编码您的路径。


更好的方法是


模型包从全局配置获取json路径,或从json路径获取初始化模型,例如model := NewModel(config_path)。因此,揭示运行可以使用您想要的任何json初始化模型。

../../conf/patients.json您的xxxx_testing.go中的硬代码“ ”


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 455 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信