执行go install时老是报错,该错误对应的代码文件已修改,但似乎未读取到,网上翻了几个帖子,一种情况是go install时,仅编译当前package的代码,其他package已生成.a文件的不会再重复编译,此种情况可以删除${GOPATH}/pkg/linux_amd64/**/路径下对应的.a文件后重新go install编译!
但楼主遇到的是另一个问题,迁移代码路径带来的问题:

旧版代码

main.go旧版中引用了pkg1.go中定义的一个func:

package main

import "gitee.com/demo/pkg1"

func main() {
    pkg1.Func("hello")
}

pkg1.go旧版

package pkg1

func Func(arg string) {
    return
}

旧版中Func函数仅有一个参数

新版代码

pkg1.go新版修改了参数列表:

package pkg1

func Func(arg1, arg2 string) {
    return
}

main.go新版相应的修改了传参列表:

package main

import "gitee.com/demo/pkg1" // 注意:此处引用路径并没有随着变更

func main() {
    pkg1.Func("hello", "world")
}

目录变更

原src目录结构

src
└── gitee.com
    └── demo
        ├── main.go
        └── pkg1
            └── pkg1.go

目录变更后结构

src
└── gitee.com
    └── user  // 新增了一层user目录
        └── demo
            ├── main.go
            └── pkg1
                └── pkg1.go

由于代码是git clone下载到本地,变更路径后,代码中的依赖引用关系并未改变,此时再在demo路径执行go install时会报错:

# gitee.com/user/demo
./main.go:6:33: too many arguments in call to pkg1.Func
    have (string, string)
    want (string)

解决方法

要么恢复目录结构,要么修改代码的依赖引用路径,总之是个粗心引起的、容易踩坑的错误,做个记录,避免将来再踩坑~

文章来源于互联网,如有雷同请联系站长删除:【golang踩坑日记】go install/build/run 读取不到最新代码问题

发表评论