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



我分叉了一个 go 模块,并希望在我的项目中使用该分叉,该分叉通过 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"

为什么我会收到此错误?我认为 go.mod 中的替换指令允许分叉模块 go.mod 保持不变。

您有以下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 以查看最终选定的版本,包括它显示任何replaceexclude指令的结果。

如何使用分叉模块 [?]

你不能。Github分支产生一个不相关的包,很可能甚至不可构建。

不要分叉,克隆。然后推送到另一个遥控器(可以是分叉(。

最新更新