我在解析Go应用程序中的相对文件路径时遇到问题。为此,我决定制作一个程序包,为不同的配置文件提供统一的界面。 conf
软件包包含相关的数据文件,因此基本上是文件树:
app/conf
+ config.go
+ config.json
+ ...
app/code
+ code.go
+ code_test.go
问题是,当app/code/code_test.go
中定义的测试调用app/conf
包中的一个函数,而该包又试图打开app/conf/config.json
时,由于工作目录的存在,相对路径被弄乱了位于app/code
。
我看过其他提到path/filepath
包,尤其是filepath.Abs
function的SO答案,它们将相对路径转换为绝对路径。但是,这不能解决我的问题,因为绝对路径将基于错误的工作目录。
使用基于GOPATH的“绝对路径” 的某些解决方案可能就足够了,但是我想在构建和导出代码时,GOPATH的意义不大。
仅将所有配置文件都移植到硬编码的Go结构中是不可行的,因为它们是跨语言使用的。
答案 0 :(得分:1)
依赖源中的配置文件路径不仅是单元测试中的问题,而且在生产中也将是一个问题。通常,代码会执行以下操作:
io.Reader
,它将从中读取配置。main
将打开一个文件(其路径可能是硬编码的,通过命令行传递的,通过env var传递的等),然后将其传递给配置处理程序以供读取。bytes.Buffer
之类的内容,并将其传递给配置处理程序以供读取。Config
,然后将其传递给被测函数。