小编Sil*_*orm的帖子

如何可靠地让项目扎根于 go?

现在我runtime.Caller(0)结合使用path.Dirfilepath.Abs来获取当前执行文件的路径并获取相对于它的项目根目录。

所以假设我有一个这样的文件夹结构:

$GOPATH/src/example.org/myproject
$GOPATH/src/example.org/myproject/main.go
$GOPATH/src/example.org/myproject/path
$GOPATH/src/example.org/myproject/path/loader.go
Run Code Online (Sandbox Code Playgroud)

如果我想要我的项目根目录,我调用 loader.go ,它依次获取其路径,runtime.Caller(0)然后上升一个文件夹以到达项目根目录。

问题是当使用go test -cover执行的文件不再在其正常位置时,而是在用于测试和覆盖率分析的特殊子目录中。
runtime.Caller(0)给我以下内容:

example.org/myproject/path/_test/_obj_/loader.go
Run Code Online (Sandbox Code Playgroud)

运行它path.Dirfilepath.Abs会给我:

$GOPATH/src/example.org/myproject/path/example.org/myproject/path/_test/_obj_
Run Code Online (Sandbox Code Playgroud)

当我从那里上去时,我不会到达项目根目录,但显然完全不同。所以我的问题
是:有没有可靠的方法来获得项目根?

testing go

6
推荐指数
1
解决办法
7166
查看次数

标签 统计

go ×1

testing ×1