如何使用带有版本化 Go 模块的分叉模块(v1.11+,GO111MODULE=on)
How to use a forked module, with versioned Go Modules (v1.11+, GO111MODULE=on)
我 forked a go module, and want to use the fork in my project that uses versioned modules 通过 v1.12
。我的代码不在我的 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"
为什么会出现此错误?我认为 replace directive in go.mod
allows for the forked modules go.mod 保持不变。
How to use a forked module [?]
你不能。 Github 分叉产生了一个不相关的包,很可能甚至无法构建。
不要分叉,克隆。然后推送到不同的遥控器(可以是叉子)。
您有以下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 (
...
_ "go.larrymyers.com/protoc-gen-twirp_typescript" <<<< original name
)
您还应该 运行 go list -m all
查看最终选择的版本,包括它显示任何 replace
和 exclude
指令的结果。
我 forked a go module, and want to use the fork in my project that uses versioned modules 通过 v1.12
。我的代码不在我的 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"
为什么会出现此错误?我认为 replace directive in go.mod
allows for the forked modules go.mod 保持不变。
How to use a forked module [?]
你不能。 Github 分叉产生了一个不相关的包,很可能甚至无法构建。
不要分叉,克隆。然后推送到不同的遥控器(可以是叉子)。
您有以下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 (
...
_ "go.larrymyers.com/protoc-gen-twirp_typescript" <<<< original name
)
您还应该 运行 go list -m all
查看最终选择的版本,包括它显示任何 replace
和 exclude
指令的结果。