我forked个go模块,并想在我的项目中使用通过v1.12
使用versioned modules的fork。我的代码不在GOPATH
中。
我的项目的go.mod
:
module github.com/me/myproj
go 1.12
require (
go.larrymyers.com/protoc-gen-twirp_typescript v0.0.0-20190605194555-ffbfe407b60f
)
replace go.larrymyers.com/protoc-gen-twirp_typescript => github.com/rynop/protoc-gen-twirp_typescript master
protoc-gen-twirp_typescript是protoc
的工具,所以这是我的tools.go
:
// +build tools
package tools
import (
// protocol buffer compiler plugins
_ "github.com/golang/protobuf/protoc-gen-go"
_ "github.com/mwitkow/go-proto-validators/protoc-gen-govalidators"
_ "github.com/twitchtv/twirp/protoc-gen-twirp"
_ "github.com/rynop/protoc-gen-twirp_typescript"
)
当我运行go mod tidy
下载我的依赖项时,出现此错误:
go: finding github.com/rynop/protoc-gen-twirp_typescript master
go: finding github.com/rynop/protoc-gen-twirp_typescript latest
go: github.com/rynop/protoc-gen-twirp_typescript@v0.0.0-20190618203538-a346b5d9c8fb: parsing go.mod: unexpected module path "go.larrymyers.com/protoc-gen-twirp_typescript"
为什么会出现此错误?我认为go.mod
中的replace指令允许forked modules go.mod保持不变。
答案 0 :(得分:4)
您有以下replace
:
replace go.larrymyers.com/protoc-gen-twirp_typescript => github.com/rynop/protoc-gen-twirp_typescript master
如果我遵循的话,实际上是replace originalname => forkname
我认为问题在于您使用的是叉子的名称,而不是原始名称:
import (
// protocol buffer compiler plugins
_ "github.com/golang/protobuf/protoc-gen-go"
_ "github.com/mwitkow/go-proto-validators/protoc-gen-govalidators"
_ "github.com/twitchtv/twirp/protoc-gen-twirp"
_ "github.com/rynop/protoc-gen-twirp_typescript" <<<< PROBLEM, using fork name
)
您看到的错误消息似乎是go
命令对此抱怨。
我怀疑如果您在import语句中使用原始名称,它会起作用:
import (
...
_ "go.larrymyers.com/protoc-gen-twirp_typescript" <<<< original name
)
您还应该运行go list -m all
来查看最终选择的版本,包括显示任何replace
和exclude
指令的结果。
答案 1 :(得分:1)
如何使用分叉模块[?]
您不能。 Github分支会产生不相关的软件包,很有可能甚至无法构建。
别叉,克隆。推到另一个遥控器(可以是叉子)。