How can I get a file in a Go web project for testing and production? -
i working on web project use go (with martini) backend. contains reverse-geocoder maps coordinates city names. so, reverse-geocoder has read cities.csv.
the structure is
handlers/city/create.go services/geo/reverse.go services/geo/cities.csv main.go now main.go started start web service. handler handlers/city/create.go makes use of services/geo/reverse.go city cities.csv.
the problem cities.csv.
what i've tried
plain filename
however, when use csvfilename := "cities.csv":
- the tests work
- the handler doesn't work go assumes
/home/me/go/src/github.com/githubuser/backend/cities.csv
adjusted filename
when adjust filename relative root (csvfilename := "services/geocalc/cities.csv"), tests fail. assume /home/me/github/go/src/github.com/githubuser/backend/services/geocalc/services/geocalc/city-names-geocoordinates.csv.
args[0]
this doesn't work either:
filename := filepath.dir(os.args[0]) filedirectory := filepath.dir(filename) csvfilename, _ := filepath.abs(path.join(filedirectory, "cities.csv")) now tests fail /tmp/go-build210484207/github.com/githubuser/logbook-backend/services/geocalc/cities.csv
runntime caller
_, filename, _, _ := runtime.caller(1) filedirectory := filepath.dir(filename) csvfilename, _ := filepath.abs(path.join(filedirectory, "cities.csv")) works tests, in "production" (testing http-queries) assumes /home/me/github/go/src/github.com/githubuser/backend/handlers/packets/cities.csv
os.getwd()
version 1filedirectory, _ := os.getwd() csvfilename, _ := filepath.abs(path.join(filedirectory, "cities.csv")) fails in production /home/me/github/go/src/github.com/githubuser/logbook-backend/cities.csv.
filedirectory, _ := os.getwd() csvfilename, _ := filepath.abs(path.join(filedirectory, "services/geo/cities.csv")) fails in test /home/me/github/go/src/github.com/githubuser/logbook-backend/services/geo/services/geo/cities.csv
i realized can use gopath environment variable. set (see the gopath environment variable) , therefore no additional work:
filedirectory := os.getenv("gopath") csvfilename, _ := filepath.abs(path.join(filedirectory, "src/github.com/gituser/backend/services/geo/cities.csv")) csvfile, err := os.open(csvfilename)
Comments
Post a Comment