go - Travis 看到 GO 函数的旧签名并且不会构建
问题描述
我在 GO 项目中对Travis CI有一个奇怪的行为。
它失败了 [here],抱怨一个函数只接受 1 个参数并用 2 个参数调用。
src/finances-service/main.go:45:19: too many arguments in call to route.Register
have (*gin.Engine, *controller.TokensController)
want (*controller.TokensController)
它过去只接受 . TokensController
,但现在,在这个拉取请求中,它也接受gin.Engine
.
如果我们在这个分支中查看这个文件的源代码,我们可以看到函数签名接受 2 个参数。
func Register(
engine *gin.Engine,
tokensController *controller.TokensController,
) {
然后在生产代码中调用一次。
route.Register(engine, tokensController)
并在测试代码中。
route.Register(testRoute, tokensController)
我不明白这种行为。我确信它有一些明显的东西,我只是没有看到它。我谦卑地请求你的帮助。我已向Travis CI发送了一封电子邮件,但仍在等待答复。在这方面寻求各方面的帮助。提前致谢。
解决方案
我刚刚在我的本地环境中克隆了 repo 并make build
通过了master
和22-banner
分支。
我搞砸了一点,意识到您已经出售了自己的 src 目录。这绝对不是一个好主意。
如果您追踪到路由包,它将最终位于供应商文件夹中的某个位置,而不是它应该在的某个位置。
那么分辨率是多少呢?
首先,如果你真的想使用 Dep,那么你必须把那个vendor
目录放在根目录下。Gopkg.*
没有它,文件什么都不是。
我看到您有三个分支,并且您使用相同的依赖项,即使您尝试在master
. 正如我上面所说,您还出售了自己的软件包。您不应该对工作目录中的本地包执行此操作。如果你真的想要,你可以创建另一个带有版本标签的 repo。
然后,你必须确保你$GOPATH/src/github.com/<xxx>/<yyy>
在 Travis 上构建,你的 repo 必须在那里。
之后,由于您的本地包没有缓存在供应商文件夹中,因此它将成功构建在 Travis 上。
PS:出于测试目的,只需清除 Dep 创建的所有内容并仅使用go get
. 这里出现的问题仅与供应商有关。
推荐阅读
- python - 从对象数组中获取所有对象的特定属性的数组
- angular - 类型定义中的感叹号
- tensorflow - 如何在我的代码中使用张量核心而不是 cuda 核心?
- java - 在枚举中添加长方法是不好的设计吗?
- javascript - 调用 e.preventDefault() 后提交复选框表单
- html - 当显示设置为内联时,边距顶部不起作用
- javascript - 使用Router和Links在同一个地方渲染所有组件
- ruby - Savon ruby gem 的“dh 键太小”
- sql - 在 FK user_id 上为促销添加 UNIQUE 约束会阻止用户两次声称促销吗?
- spring-boot - 通过邮递员发送二维字节数组(多个文件)作为多部分请求