Go 从具有不同调用者的相对路径读取文件
我正在尝试读取项目目录中的文件 我的问题是,根据调用方的不同,路径会发生变化。调用者发生了变化,因为我想对这段代码进行单元测试,而调用者不再是Go 从具有不同调用者的相对路径读取文件,go,Go,我正在尝试读取项目目录中的文件 我的问题是,根据调用方的不同,路径会发生变化。调用者发生了变化,因为我想对这段代码进行单元测试,而调用者不再是Main.go 这就是我的项目结构: 我试图从中访问specialChars.txt的代码如下所示: func RemoveSpecialChars(word string) string { file, err := ioutil.ReadFile("wordlists/specialChars.txt") [...] } 此代码适用
Main.go
这就是我的项目结构:
我试图从中访问specialChars.txt
的代码如下所示:
func RemoveSpecialChars(word string) string {
file, err := ioutil.ReadFile("wordlists/specialChars.txt")
[...]
}
此代码适用于从Main.go开始的启动,但不适用于从cleanupuutil\u test.go开始的启动。为了让它在测试中正常工作,我需要文件,err:=ioutil.ReadFile(“../wordlist/specialChars.txt”)
我找到了这样的答案:
\u,filename,\u,ok:=runtime.Caller(0)
,这显然也依赖于调用者
是否可以独立于调用函数获取项目根路径?
还是我的代码设计错了?我应该将文件路径传递到函数中吗?将文件路径作为参数传递到函数中(如上一个问题所示)
更多详细信息:
相对路径“wordlist/specialChars.txt”
实际上并不取决于源文件的位置(例如Main.go
或CleanupUtil\u test.go
),而是取决于执行源文件的位置。因此,您可以从根目录运行测试,然后它就可以实际工作了。简而言之,当前工作目录是相关的
尽管如此,我还是建议指定路径,因为这样可以使函数更加可重用和通用
也许你甚至不需要把这些信息放到一个文件中,但是你可以简单地用一个包含这些字符的字符串。在这种情况下,您还可以检查是否已经覆盖了您的用例。这是一个相当麻烦的API,为什么调用者需要知道文件在哪里?