脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - go modules中replace使用方法

go modules中replace使用方法

2022-10-21 12:10sunsky Golang

这篇文章主要为大家介绍了go modules中replace使用方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

使用replace替换package

因为某些未知原因,并不是所有的包都能直接用go get获取到,这时我们就需要使用go modules的replace功能了。

replace顾名思义,就是用新的package去替换另一个package,他们可以是不同的package,也可以是同一个package的不同版本。看一下基本的语法:

go mod edit -replace=old[@v]=new[@v]

old是要被替换的package,new就是用于替换的package。

这里有几点要注意:

  • replace应该在引入新的依赖后立即执行,以免go tools自动更新mod文件时使用了old package导致可能的失败
  • package后面的version不可省略。(edit所有操作都需要版本tag)
  • version不能是master或者latest,这两者go get可用,但是go mod edit不可识别,会报错。(不知道是不是bug,虽然文档里表示可以这么用,希望go1.12能做点完善措施)

基于以上原因,我们替换一个package的步骤应该是这样的:

  • 首先go get new-package(如果你知道package的版本tag,那么这一步其实可以省略,如果想使用最新的版本而不想确认版本号,则需要这一步)
  • 然后查看go.mod,手动复制new-package的版本号(如果你知道版本号,则跳过,这一步十分得不人性化,也许以后会改进)
  • 接着go mod tidy或者go build或者使用其他的go tools,他们会去获取new-package然后替换掉old-package
  • 最后,在你的代码里直接使用old-package的名字,golang会自动识别出replace,然后实际你的程序将会使用new-package,替换成功

下面我们仍然用chromedp的example做一个示例。

 

示例

chromedp使用了golang.org/x/image,这个package一般直连是获取不了的,但是它有一个github.com/golang/image的镜像,所以我们要用replace来用镜像替换它。

我们先来看看如果不replace的情况下的依赖情况:

go modules中replace使用方法

没错,我们使用了原来的包,当然如果你无法获取到它的话是不会被记录进来的。

下面我们go get它的镜像:

# master表示获取最新的commit
go get github.com/golang/image@master

然后我们查看版本号:

cat go.mod

go modules中replace使用方法

有了版本号,我们就能replace了:

go mod edit -replace=golang.org/x/image@v0.0.0-20180708004352-c73c2afc3b81=github.com/golang/image@v0.0.0-20180708004352-c73c2afc3b81

现在我们查看一下go.mod:

go modules中replace使用方法

replace信息已经更新了,现在我们只要go mod tidy或者go build,我们的代码就可以使用new-package了。

更新后的go.sum,依赖已经替换成了镜像:

go modules中replace使用方法

目前来看,replace做的远不如go get那样方便人性化,不过毕竟还只是测试阶段的功能,期待一下它在go1.12的表现吧。

以上就是go modules中replace使用方法的详细内容,更多关于go modules使用replace的资料请关注服务器之家其它相关文章!

原文地址:https://cloud.tencent.com/developer/article/1683694

延伸 · 阅读

精彩推荐
  • Golanggolang中make和new的区别示例详解

    golang中make和new的区别示例详解

    Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似。不过解释两者之间的不同也非常容易,下面这篇文章主要介绍了golang中make和new的区...

    sanyuesha5192020-05-08
  • Golanggolang中tar压缩和解压文件详情

    golang中tar压缩和解压文件详情

    这篇文章主要给大家介绍golang中tar压缩和解压文件,文章以查看官方文档自带的给大家演习一下golang的archive/tar压缩和解压功能,需要的朋友可以参考一下...

    快乐编程8602021-11-30
  • Golang解析Go 标准库 http.FileServer 实现静态文件服务

    解析Go 标准库 http.FileServer 实现静态文件服务

    http.FileServer 方法属于标准库 net/http,返回一个使用 FileSystem 接口 root 提供文件访问服务的 HTTP 处理器。下面通过本文给大家介绍Go 标准库 http.FileServer 实现...

    舆图易稿6152020-05-18
  • Golanggolang 的string与[]byte转换方式

    golang 的string与[]byte转换方式

    这篇文章主要介绍了golang 的string与[]byte转换方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    弃更内容请谨慎查看10192021-06-04
  • Golanggolang socket断点续传大文件的实现方法

    golang socket断点续传大文件的实现方法

    今天小编就为大家分享一篇golang socket断点续传大文件的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    Tab6094952020-05-26
  • GolangGo语言特点及基本数据类型使用详解

    Go语言特点及基本数据类型使用详解

    这篇文章主要为大家介绍了Go语言特点及基本数据类型使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    愿许浪尽天涯4602022-09-08
  • GolangGo语言中通过Lua脚本操作Redis的方法

    Go语言中通过Lua脚本操作Redis的方法

    这篇文章主要给大家介绍了关于Go语言中通过Lua脚本操作Redis的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    吃土的汉子3782020-05-13
  • GolangGo语言快速入门指针Map使用示例教程

    Go语言快速入门指针Map使用示例教程

    这篇文章主要为大家介绍了Go语言快速入门指针Map示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    程序员小乔3642022-08-07