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,为什么调用者需要知道文件在哪里?