相关疑难解决方法(0)

我可以在多个源目录中开发一个 go 包吗?

我正在开发一个 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)

它以某种方式可能吗?

go

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

Go 覆盖多个包和 Gitlab 覆盖徽章

我正在尝试为我的 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%是仅覆盖最后一个包的情况。

我该怎么办呢?

testing code-coverage go

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

在Go中封装平台特定代码的正确方法是什么?

我想开发一个小型Go应用程序,该应用程序向演示文稿的受众显示使用的按键快捷方式。

为了了解键盘事件,我将必须使用一些平台特定的代码。封装平台特定代码的Go方法是什么?我一直在寻找诸如编译器切换器或平台模块之类的关键字,但实际上找不到任何相关信息。

architecture cross-platform go

5
推荐指数
2
解决办法
958
查看次数