如何在Go web项目中获取用于测试和生产的文件?
我目前正在从事一个web项目,我们使用Go with martini作为后端。它包含一个反向地理编码器,将坐标映射到城市名称。为此,反向地理编码器必须读取cities.csv 结构是如何在Go web项目中获取用于测试和生产的文件?,go,Go,我目前正在从事一个web项目,我们使用Go with martini作为后端。它包含一个反向地理编码器,将坐标映射到城市名称。为此,反向地理编码器必须读取cities.csv 结构是 handlers/city/create.go services/geo/reverse.go services/geo/cities.csv main.go 现在启动main.go以启动web服务。处理程序handlers/city/create.go使用services/geo/reverse.go获取 使用
handlers/city/create.go
services/geo/reverse.go
services/geo/cities.csv
main.go
现在启动main.go以启动web服务。处理程序handlers/city/create.go使用services/geo/reverse.go获取
使用cities.csv创建的城市
问题是获取cities.csv
我试过的
普通文件名
但是,当我仅使用csvFilename:=cities.csv时:
测试有效
处理程序不能像go/home/me/go/src/github.com/githubuser/backend/cities.csv那样工作
调整后的文件名
当我将文件名调整为相对于根csvFilename:=services/geocalc/cities.csv时,测试失败。他们假设/home/me/GitHub/go/src/GitHub.com/githubuser/backend/services/geocalc/services/geocalc/city-names-geocordinates.csv
args[0]
这也不起作用:
filename := filepath.Dir(os.Args[0])
filedirectory := filepath.Dir(filename)
csvFilename, _ := filepath.Abs(path.Join(filedirectory, "cities.csv"))
现在,使用/tmp/go-build210484207/github.com/githubuser/logbook-backend/services/geocalc/cities.csv测试失败
运行时间呼叫器
适用于测试,但在使用http查询的生产测试中,它假定为/home/me/GitHub/go/src/GitHub.com/githubuser/backend/handlers/packets/cities.csv
操作系统Getwd
版本1
无法使用/home/me/GitHub/go/src/GitHub.com/githubuser/logbook-backend/cities.csv进行生产
版本2
使用/home/me/GitHub/go/src/GitHub.com/githubuser/logbook backend/services/geo/services/geo/cities.csv测试失败。我刚刚意识到我可以使用GOPATH环境变量。它始终设置为see,因此无需额外工作:
filedirectory := os.Getenv("GOPATH")
csvFilename, _ := filepath.Abs(path.Join(filedirectory, "src/github.com/gituser/backend/services/geo/cities.csv"))
csvfile, err := os.Open(csvFilename)
为什么不将其作为具有绝对路径的命令行参数传递?。。。或者是一个环境变量,或者是配置文件中的一个键?不确定,那是可能的。但是如果我能得到当前包的目录,那就简单多了。使用Go难道不可能吗?您是否尝试过用os.Getwd代替os.Args[0]来获取CWD?我通常就是这样做的。@不是高尔夫球手,我刚刚试过。一个版本在运行服务器时工作,另一个版本在运行go test的测试时工作。/。。。。没有一个版本同时适用于这两种情况。问题似乎是去测试。。。从另一个目录运行测试。是否可以从常用目录运行所有测试?
filedirectory, _ := os.Getwd()
csvFilename, _ := filepath.Abs(path.Join(filedirectory, "cities.csv"))
filedirectory, _ := os.Getwd()
csvFilename, _ := filepath.Abs(path.Join(filedirectory, "services/geo/cities.csv"))
filedirectory := os.Getenv("GOPATH")
csvFilename, _ := filepath.Abs(path.Join(filedirectory, "src/github.com/gituser/backend/services/geo/cities.csv"))
csvfile, err := os.Open(csvFilename)