Go安装Fork后的gnostic-grpc报错:模块存在但不含对应包
问题与解决方案
背景
原本执行以下命令可正常使用gnostic工具:
go install github.com/google/gnostic@v0.6.8 go install github.com/googleapis/gnostic-grpc@v0.1.1
运行gnostic --grpc-out=./target ./source.yaml也能正常执行。
但Fork原gnostic-grpc库后,修改为禁用蛇形命名转换,并重命名所有包引用为github.com/thlib/gnostic-grpc,执行go mod init github.com/thlib/gnostic-grpc && go mod tidy后,通过commit哈希或版本号安装时触发报错:
go: downloading github.com/thlib/gnostic-grpc v0.1.3 go: github.com/thlib/gnostic-grpc@v0.1.3: module github.com/thlib/gnostic-grpc@v0.1.3 found, but does not contain package github.com/thlib/gnostic-grpc
同时存在以下疑问:
- 原库根目录无
main.go,为何go install能成功? - 原库
/incompatibility目录中的ApiSetIncompatibility类型未显式声明,却无编译错误? - 当前执行官方安装指令也报错,参考Stack Overflow相关问题未解决。
1. Fork修改后安装报错的解决
这个错误源于Go模块路径与实际代码的包声明不匹配:原gnostic-grpc根目录并非Go包(无.go文件声明根包),功能代码均在子目录(如generator)中。
解决步骤:
- 确认Fork库中所有子目录的Go文件,包引用已改为
github.com/thlib/gnostic-grpc/[子目录名](例如github.com/thlib/gnostic-grpc/generator); - 若需让gnostic加载你的修改版插件,在使用gnostic的项目中执行依赖替换:
go mod edit -replace github.com/googleapis/gnostic-grpc=github.com/thlib/gnostic-grpc@v0.1.3 go mod tidy - 确保Fork库已推送到GitHub,且对应版本标签(如
v0.1.3)已正确创建并推送,Go模块依赖拉取依赖标签或commit哈希定位版本。
2. 原库无main.go却能go install的原因
go install并非仅用于安装可执行文件(带main包的代码),还可安装库包:执行go install <模块路径>时,会将该模块编译后缓存到本地Go模块缓存目录($GOPATH/pkg/mod),供依赖它的程序调用。
原gnostic-grpc是gnostic的插件,gnostic运行时会加载该模块的子包(如generator),因此go install的作用是将模块代码缓存到本地,让gnostic能找到并加载,而非生成独立可执行文件。
3. 未显式声明类型却无编译错误的原因
ApiSetIncompatibility类型大概率是通过Protocol Buffers(Protobuf)生成的代码:
- 原库
/incompatibility目录下存在.proto定义文件,编译后会生成包含该类型声明的.pb.go文件(可能被加入.gitignore未提交到仓库,但编译时会自动生成); - 也可能该类型定义在依赖的其他模块中,通过导入语句引入,可查看对应Go文件的导入路径确认。
4. 官方指令报错的解决
若原本的官方安装指令现在报错,可尝试以下操作:
- 清理Go模块缓存:
go clean -modcache - 重新执行指定版本的安装命令:
go install github.com/google/gnostic@v0.6.8 go install github.com/googleapis/gnostic-grpc@v0.1.1 - 检查Go版本兼容性:gnostic v0.6.8要求Go 1.16及以上版本;
- 尝试在空目录下初始化临时模块后安装:
mkdir test-gnostic && cd test-gnostic go mod init test/gnostic go get github.com/google/gnostic@v0.6.8 go get github.com/googleapis/gnostic-grpc@v0.1.1 go install github.com/google/gnostic@v0.6.8 go install github.com/googleapis/gnostic-grpc@v0.1.1
内容的提问来源于stack exchange,提问作者Timo Huovinen
相关产品推荐
相关产品推荐

