首页 > 解决方案 > 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发送了一封电子邮件,但仍在等待答复。在这方面寻求各方面的帮助。提前致谢。

标签: gogithubtravis-ci

解决方案


我刚刚在我的本地环境中克隆了 repo 并make build通过了master22-banner分支。

我搞砸了一点,意识到您已经出售了自己的 src 目录。这绝对不是一个好主意。

如果您追踪到路由包,它将最终位于供应商文件夹中的某个位置,而不是它应该在的某个位置。


那么分辨率是多少呢?

首先,如果你真的想使用 Dep,那么你必须把那个vendor目录放在根目录下。Gopkg.*没有它,文件什么都不是。

我看到您有三个分支,并且您使用相同的依赖项,即使您尝试在master. 正如我上面所说,您还出售了自己的软件包。您不应该对工作目录中的本地包执行此操作。如果你真的想要,你可以创建另一个带有版本标签的 repo。

然后,你必须确保你$GOPATH/src/github.com/<xxx>/<yyy>在 Travis 上构建,你的 repo 必须在那里。

之后,由于您的本地包没有缓存在供应商文件夹中,因此它将成功构建在 Travis 上。

PS:出于测试目的,只需清除 Dep 创建的所有内容并仅使用go get. 这里出现的问题仅与供应商有关。


推荐阅读