我需要参考patients.json
,patients.go
这里是文件夹结构:
如果我做:
filepath.Abs("../../conf/patients.json")
它适用于go test ./...
但失败了revel run
如果我做:
filepath.Abs("conf/patients.json")
正好相反(狂欢很好,但测试失败)。
有没有办法正确引用该文件,以便它既适用于测试又适用于正常程序运行?
我需要参考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()
or 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"
我自己从未使用过 Revel,但以下内容对我很有帮助:
http://revel.github.io/docs/godoc/revel.html
revel.BasePath
revel.AppPath
这不是路径的问题,而是您的设计的问题。
你应该更加小心地设计你的代码。
据我所知,您在测试文件中共享相同的路径并显示运行。我想也许你json
在你的模型包中硬编码你的路径,这是不建议的。
更好的方法是
model := NewModel(config_path)
. 所以揭示运行可以用你想要的任何 json 初始化模型。../../conf/patients.json
您的 xxxx_testing.go 中的硬代码“ ”