我在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)
route.Register(testRoute, tokensController)
我不了解这种行为。我敢肯定有一些明显的东西,我只是看不到。我谦虚地请求您的帮助。我已经发送了一封电子邮件到 Travis CI ,但仍在等待答案。在各个方面寻求帮助。预先感谢。
答案 0 :(得分:1)
我刚刚在本地环境中克隆了该存储库,并为make build
和master
分支传递了22-banner
。
我弄乱了一点,意识到您已经提供了自己的src目录。绝对不是一个好主意。
如果您跟踪到路由包,它将终止在供应商文件夹中的某个位置,而不是应该位于的位置。
那是什么分辨率?
首先,如果您确实要使用Dep,则必须将vendor
目录放在根目录中。没有Gopkg.*
个文件。
我看到您有三个分支,即使您试图在master
中使用不同的(或错误的)签名,也使用相同的依赖项。如前所述,您还拥有了自己的软件包。您不应对工作目录中的本地软件包执行此操作。如果确实需要,您可以使用版本标签创建另一个存储库。
然后,您必须确保您在Travis构建的$GOPATH/src/github.com/<xxx>/<yyy>
上,您的存储库必须位于此处。
此后,由于您的本地软件包未在供应商文件夹中缓存,因此它将成功在Travis上构建。
P.S .:出于测试目的,只需清除Dep创建的所有内容并仅使用go get
。这里出现的问题仅与供应商有关。