从具有不同呼叫者

时间:2017-05-10 08:54:16

标签: go

我正在尝试从项目目录中的文件中读取。

我的问题是,根据调用者的不同,路径会发生变化。调用者更改,因为我想对此代码进行单元测试,调用者不再是Main.go

这就是我的项目结构:

Project Structure

我尝试访问specialChars.txt的代码如下所示:

func RemoveSpecialChars(word string) string {
    file, err := ioutil.ReadFile("wordlists/specialChars.txt")
    [...]
}

此代码适用于从Main.go开始,但不适用于从CleanupUtil_test.go开始。为了让它在测试中运行,我需要file, err := ioutil.ReadFile("../wordlists/specialChars.txt")

我找到了这样的答案:https://stackoverflow.com/a/32163888/2837489 _, filename, _, ok := runtime.Caller(0)显然也取决于来电者。

是否可以使项目根路径独立于调用函数? 或者我的代码设计错了吗?我应该将文件路径传递给函数吗?

1 个答案:

答案 0 :(得分:1)

将文件路径作为参数传递给函数(如上一个问题所示)。

更多详情:

相对路径"wordlists/specialChars.txt"实际上并不依赖于源文件的位置(例如Main.goCleanupUtil_test.go),而是取决于您执行它的位置。所以你可以从你的根目录运行你的测试,然后它实际上会工作。简而言之,当前的工作目录是相关的。

不过,我建议指定路径,因为这样可以使您的功能更具可重用性和通用性。

也许您甚至不需要将此信息放入文件中,但可以只包含包含这些字符的字符串。在这种情况下,您还可以检查https://golang.org/pkg/regexp/#Regexp.ReplaceAll是否已涵盖您的用例。