是否可以在golang测试中将包结构的当前根作为字符串获取?

我正在为我的单元测试编写一个实用函数,该函数由多个包中的单元测试使用。此实用程序函数必须读取特定文件(始终是同一个文件)。这里有三个不起作用的解决方案,以解释我在寻找什么以及为什么。

  1. 硬编码绝对路径。这将失败,因为尝试测试项目的另一个用户可能在绝对路径上具有不同的前缀。

  2. 从定义实用程序函数的文件路径硬编码相对路径。这将失败,因为导入和使用此函数的包不一定与定义实用程序函数的文件处于同一文件层次结构级别,并且相对路径是相对于导入程序而不是导入程序进行解释的。

  3. 从每个调用者相对于调用者的包传递文件的相对路径。这实际上有效,但似乎非常冗长,因为现在必须更改每个调用者以传递一个文件。

我看到了第四个解决方案,我可以在实用程序函数中硬编码一个路径,该路径相对于顶级包的根目录。但是,我一直无法找到一种方法来获取代码中的根目录,尽管我怀疑有一种方法,因为可以从根解析导入。

因此,我如何获得广受欢迎的根目录?

我查看了各种 Go 文档,但到目前为止还没有找到解决方案。


慕神8447489
浏览 179回答 3
3回答

牧羊人nacy

您可以在您的项目中创建一个子包,./internal/projectpath/projectpath.go并粘贴以下内容:package projectpathimport (    "path/filepath"    "runtime")var (    _, b, _, _ = runtime.Caller(0)    // Root folder of this project    Root = filepath.Join(filepath.Dir(b), "../.."))然后你可以projectpath.Root在任何其他包中使用你的项目的根文件夹。

哔哔one

返回应用程序的根:import (    "path"    "path/filepath"    "runtime")  func RootDir() string {    _, b, _, _ := runtime.Caller(0)    d := path.Join(path.Dir(b))    return filepath.Dir(d)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go