如何使用带有版本化的Go模块的分叉模块(v1.11 +,GO111MODULE = on)

时间:2019-06-19 15:20:49

标签: go protocol-buffers protoc go-modules

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保持不变。

2 个答案:

答案 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来查看最终选择的版本,包括显示任何replaceexclude指令的结果。

答案 1 :(得分:1)

  

如何使用分叉模块[?]

您不能。 Github分支会产生不相关的软件包,很有可能甚至无法构建。

别叉,克隆。推到另一个遥控器(可以是叉子)。