登录
首页 >  Golang >  Go问答

使用Go模块分支和版本控制的方法(适用于Go版本1.11及以上,启用GO111MODULE)

来源:stackoverflow

时间:2024-03-08 21:48:32 499浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《使用Go模块分支和版本控制的方法(适用于Go版本1.11及以上,启用GO111MODULE)》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我分叉了一个 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/[email protected]: 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 以查看最终选定的版本,包括它显示任何 replaceexinclude 指令的结果。

你不能。 github 分支会生成一个不相关的包,很可能甚至无法构建。

不要分叉,克隆。然后推送到不同的遥控器(可以是叉子)。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>