特拉维斯(Travis)看到了GO函数的旧签名,因此无法构建

时间:2018-08-16 09:03:59

标签: go github travis-ci

我在GO项目的 Travis CI 上有一个奇怪的行为。

[此处]失败,抱怨一个函数仅接受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

如果我们查看the source code for this file in this branch,我们会看到接受2个参数的函数签名。

func Register(
    engine *gin.Engine,
    tokensController *controller.TokensController,
) {

然后将其称为once in production code

route.Register(engine, tokensController)

once in test code

route.Register(testRoute, tokensController)

我不了解这种行为。我敢肯定有一些明显的东西,我只是看不到。我谦虚地请求您的帮助。我已经发送了一封电子邮件到 Travis CI ,但仍在等待答案。在各个方面寻求帮助。预先感谢。

1 个答案:

答案 0 :(得分:1)

我刚刚在本地环境中克隆了该存储库,并为make buildmaster分支传递了22-banner

我弄乱了一点,意识到您已经提供了自己的src目录。绝对不是一个好主意。

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


那是什么分辨率?

首先,如果您确实要使用Dep,则必须将vendor目录放在根目录中。没有Gopkg.*个文件。

我看到您有三个分支,即使您试图在master中使用不同的(或错误的)签名,也使用相同的依赖项。如前所述,您还拥有了自己的软件包。您不应对工作目录中的本地软件包执行此操作。如果确实需要,您可以使用版本标签创建另一个存储库。

然后,您必须确保您在Travis构建的$GOPATH/src/github.com/<xxx>/<yyy>上,您的存储库必须位于此处。

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

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