使用go get获取fzf开发分支及重新获取时出现模块加载错误求助
这个问题我之前也碰到过,核心是模块路径不匹配触发了Go模块的校验机制,具体来说:
你看到的错误信息gopkg.in/DATA-DOG/go-sqlmock.v1@v1.3.3: go.mod has non-....v1 module path "github.com/DATA-DOG/go-sqlmock" at revision v1.3.3,意思是:当Go尝试拉取gopkg.in/DATA-DOG/go-sqlmock.v1的v1.3.3版本时,发现该版本的go.mod文件里声明的模块路径是github.com/DATA-DOG/go-sqlmock,和引用的gopkg.in/...v1路径不一致——Go模块要求模块的实际路径必须和go.mod里声明的完全匹配,否则就会报错中断。
之前你能正常执行go get -u github.com/junegunn/fzf,是因为稳定版本的fzf依赖链里没有引入这个有问题的sqlmock版本;而devel分支的依赖更新后引入了它,之后连正常的go get也出错,大概率是Go模块缓存里已经存了错误的依赖信息导致的。
解决步骤
第一步:清理模块缓存
先把Go的模块缓存清掉,避免错误的缓存信息干扰:go clean -modcache第二步:用
replace指令强制修正路径
如果直接拉取还是报错,可以在你的项目go.mod文件里添加replace指令,让Go用正确的模块路径去拉取依赖:replace gopkg.in/DATA-DOG/go-sqlmock.v1 => github.com/DATA-DOG/go-sqlmock v1.3.3添加后再执行你的拉取命令:
GO111MODULE=on go get -u github.com/junegunn/fzf@devel第三步:手动克隆仓库处理(如果上述方法无效)
如果fzf的devel分支本身依赖还没修复这个问题,你可以直接克隆fzf仓库到本地,切换到devel分支后手动处理依赖:git clone https://github.com/junegunn/fzf.git cd fzf git checkout devel go mod tidy执行
go mod tidy时,Go会自动尝试修复依赖问题,如果还是报错,就在本地的go.mod里添加上面的replace指令。
内容的提问来源于stack exchange,提问作者Gert Cuykens

