我正在开发一个 go 包,它有点复杂,因此我想将源代码组织到多个目录中。
但是,我不希望包的用户不得不使用太长的导入。无论如何,包的内部结构不是他们关心的。
因此,我的包结构看起来是这样的:
subDir1
subSubDir1
subSubDir2
subDir2
subSubDir3
Run Code Online (Sandbox Code Playgroud)
...等等。他们都有自己的导出电话。
我想避免我的用户必须导入
import (
"mypackage/subDir1"
"mypackage/subDir1/subSubDir2"
)
Run Code Online (Sandbox Code Playgroud)
...等等。
我只想,如果他们想使用我的包中的导出函数,他们应该通过简单地导入mypackage.
我尝试package mypackage在所有.go文件中声明。因此,我在不同目录中有源文件,但具有相同的包声明。
在这种情况下,我遇到的问题是我根本无法从同一个包中导入多个目录。它说:
./src1.go:6:15: error: redefinition of ‘mypackage’
"mypackage/mysubdir1"
^
./src1.go:4:10: note: previous definition of ‘mypackage’ was here
"mypackage"
^
./src1.go:5:15: error: redefinition of ‘mypackage’
"mypackage/mysubdir2"
^
./src1.go:4:10: note: previous definition of ‘mypackage’ was here
"mypackage"
^
Run Code Online (Sandbox Code Playgroud)
它以某种方式可能吗?
我正在尝试为我的 gitlab 项目显示准确的覆盖范围徽章。
事情是我有几个包,在 gitlab-ci.yml 中,我运行
go test $(go list ./... | grep -v /vendor/) -v -coverprofile .testCoverage.txt
Run Code Online (Sandbox Code Playgroud)
我的输出是这样的:
$ go test -coverprofile=coverage.txt -covermode=atomic ./...
ok gitlab.com/[MASKED]/pam 10.333s coverage: 17.2% of statements
ok gitlab.com/[MASKED]/pam/acquisition 0.004s coverage: 57.7% of statements
ok gitlab.com/[MASKED]/pam/acquisition/api 0.005s coverage: 72.1% of statements
ok gitlab.com/[MASKED]/pam/acquisition/ftp 24.936s coverage: 73.1% of statements
ok gitlab.com/[MASKED]/pam/repartition 0.004s coverage: 90.1% of statements
Run Code Online (Sandbox Code Playgroud)
我在 Gitlab 中解析正则表达式的测试覆盖率是:
^coverage:\s(\d+(?:\.\d+)?%)
Run Code Online (Sandbox Code Playgroud)
如果我检查 .testCoverage,我会得到很多这样的行:
gitlab.com/[MASKED]/pam/repartition/repartition.go:54.33,56.5 1 1
Run Code Online (Sandbox Code Playgroud)
因此,它给我的结果90.1%是仅覆盖最后一个包的情况。
我该怎么办呢?
我想开发一个小型Go应用程序,该应用程序向演示文稿的受众显示使用的按键快捷方式。
为了了解键盘事件,我将必须使用一些平台特定的代码。封装平台特定代码的Go方法是什么?我一直在寻找诸如编译器切换器或平台模块之类的关键字,但实际上找不到任何相关信息。