如何在 Go web 项目中获取文件以进行测试和生产?

我目前正在开发一个 Web 项目,在该项目中我们使用 Go(带马提尼)作为后端。它包含一个反向地理编码器,可将坐标映射到城市名称。为此,反向地理编码器必须读取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-geocoordinates.csv.


参数[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


运行时调用者

_, filename, _, _ := runtime.Caller(1)

filedirectory := filepath.Dir(filename)

csvFilename, _ := filepath.Abs(path.Join(filedirectory, "cities.csv"))

适用于测试,但在“生产”(使用 http 查询测试)中它假设 /home/me/GitHub/go/src/github.com/githubuser/backend/handlers/packets/cities.csv


os.Getwd()

版本 1

filedirectory, _ := os.Getwd()

csvFilename, _ := filepath.Abs(path.Join(filedirectory, "cities.csv"))

生产失败/home/me/GitHub/go/src/github.com/githubuser/logbook-backend/cities.csv。


版本 2

filedirectory, _ := os.Getwd()

csvFilename, _ := filepath.Abs(path.Join(filedirectory, "services/geo/cities.csv"))

在测试中失败 /home/me/GitHub/go/src/github.com/githubuser/logbook-backend/services/geo/services/geo/cities.csv


烙印99
浏览 171回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go