如何在Go web项目中获取用于测试和生产的文件?

如何在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获取 使用

我目前正在从事一个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获取 使用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)