为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕神8447489 2021-11-01 10:25:04
我正在为我的单元测试编写一个实用函数,该函数由多个包中的单元测试使用。此实用程序函数必须读取特定文件(始终是同一个文件)。这里有三个不起作用的解决方案,以解释我在寻找什么以及为什么。硬编码绝对路径。这将失败,因为尝试测试项目的另一个用户可能在绝对路径上具有不同的前缀。从定义实用程序函数的文件路径硬编码相对路径。这将失败,因为导入和使用此函数的包不一定与定义实用程序函数的文件处于同一文件层次结构级别,并且相对路径是相对于导入程序而不是导入程序进行解释的。从每个调用者相对于调用者的包传递文件的相对路径。这实际上有效,但似乎非常冗长,因为现在必须更改每个调用者以传递一个文件。我看到了第四个解决方案,我可以在实用程序函数中硬编码一个路径,该路径相对于顶级包的根目录。但是,我一直无法找到一种方法来获取代码中的根目录,尽管我怀疑有一种方法,因为可以从根解析导入。因此,我如何获得广受欢迎的根目录?我查看了各种 Go 文档,但到目前为止还没有找到解决方案。
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

您可以在您的项目中创建一个子包,./internal/projectpath/projectpath.go并粘贴以下内容:


package projectpath


import (

    "path/filepath"

    "runtime"

)


var (

    _, b, _, _ = runtime.Caller(0)


    // Root folder of this project

    Root = filepath.Join(filepath.Dir(b), "../..")

)

然后你可以projectpath.Root在任何其他包中使用你的项目的根文件夹。


查看完整回答
反对 回复 2021-11-01
?
哔哔one

TA贡献1854条经验 获得超8个赞

返回应用程序的根:


import (

    "path"

    "path/filepath"

    "runtime"

)  


func RootDir() string {

    _, b, _, _ := runtime.Caller(0)

    d := path.Join(path.Dir(b))

    return filepath.Dir(d)

}


查看完整回答
反对 回复 2021-11-01
  • 3 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信