您的位置:首页 > 教程 > 其他脚本 > gomodules中replace使用方法

gomodules中replace使用方法

2022-06-17 14:06:11 来源:易采站长站 作者:

gomodules中replace使用方法

目录
使用replace替换package示例

5mU站长之家-易采站长站-Easck.Com

使用replace替换package

因为某些未知原因,并不是所有的包都能直接用go>

replace顾名思义,就是用新的package去替换另一个package,他们可以是不同的package,也可以是同一个package的不同版本。看一下基本的语法:5mU站长之家-易采站长站-Easck.Com

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

old是要被替换的package,new就是用于替换的package。5mU站长之家-易采站长站-Easck.Com

这里有几点要注意:5mU站长之家-易采站长站-Easck.Com

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

    基于以上原因,我们替换一个package的步骤应该是这样的:5mU站长之家-易采站长站-Easck.Com

      首先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做一个示例。5mU站长之家-易采站长站-Easck.Com

      5mU站长之家-易采站长站-Easck.Com

      示例

      chromedp使用了golang.org/x/image,这个package一般直连是获取不了的,但是它有一个github.com/golang/image的镜像,所以我们要用replace来用镜像替换它。5mU站长之家-易采站长站-Easck.Com

      我们先来看看如果不replace的情况下的依赖情况:5mU站长之家-易采站长站-Easck.Com

      5mU站长之家-易采站长站-Easck.Com

      没错,我们使用了原来的包,当然如果你无法获取到它的话是不会被记录进来的。5mU站长之家-易采站长站-Easck.Com

      下面我们go get它的镜像:5mU站长之家-易采站长站-Easck.Com

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

      然后我们查看版本号:5mU站长之家-易采站长站-Easck.Com

      cat go.mod

      5mU站长之家-易采站长站-Easck.Com

      有了版本号,我们就能replace了:5mU站长之家-易采站长站-Easck.Com

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

      现在我们查看一下go.mod:5mU站长之家-易采站长站-Easck.Com

      5mU站长之家-易采站长站-Easck.Com

      replace信息已经更新了,现在我们只要go mod tidy或者go build,我们的代码就可以使用new-package了。5mU站长之家-易采站长站-Easck.Com

      更新后的go.sum,依赖已经替换成了镜像:5mU站长之家-易采站长站-Easck.Com

      5mU站长之家-易采站长站-Easck.Com

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

      以上就是go modules中replace使用方法的详细内容,更多关于go modules使用replace的资料请关注易采站长站其它相关文章!5mU站长之家-易采站长站-Easck.Com

      如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • 使用Go基于WebSocket构建千万级视频直播弹幕系统的代码详解

    使用Go基于WebSocket构建千万级视频直播弹幕系统的代码详解

    (1)业务复杂度介绍 开门见山,假设一个直播间同时500W人在线,那么1秒钟1000条弹幕,那么弹幕系统的推送频率就是: 500W * 1000条/秒=50亿条/秒 ,想想B站2019跨年晚会那次弹幕系统得是
    2020-07-08
  • golang中import cycle not allowed解决的一种思路

    golang中import cycle not allowed解决的一种思路

    发现问题 项目中碰到了一些问题,使用了指针函数的思路来解决相应问题 在实际项目中,因为两个项目互相引了对方的一些方法,导致了循环引用的错误,原本可以使用http的请求来解
    2019-11-10
  • 从go语言中找&和*区别详解

    从go语言中找&和*区别详解

    *和的区别 : 是取地址符号 , 即取得某个变量的地址 , 如 ; a*是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从
    2020-06-23
  • Go语言中利用http发起Get和Post请求的方法示例

    Go语言中利用http发起Get和Post请求的方法示例

    关于 HTTP 协议 HTTP(即超文本传输协议)是现代网络中最常见和常用的协议之一,设计它的目的是保证客户机和服务器之间的通信。 HTTP 的工作方式是客户机与服务器之间的 “请求-应答
    2019-11-10
  • golang如何实现mapreduce单进程版本详解

    golang如何实现mapreduce单进程版本详解

    前言 MapReduce作为hadoop的编程框架,是工程师最常接触的部分,也是除去了网络环境和集群配 置之外对整个Job执行效率影响很大的部分,所以很有必要深入了解整个过程。元旦放假的第一天
    2019-11-10
  • Go打包二进制文件的实现

    Go打包二进制文件的实现

    背景 众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。 操作 需求:打包部署到centos7 笔者打包环境:mac os 方法:
    2020-03-11
  • GO语言实现简单的目录复制功能

    GO语言实现简单的目录复制功能

    本文实例讲述了GO语言实现简单的目录复制功能。分享给大家供大家参考。具体实现方法如下: 创建一个独立的 goroutine 遍历文件,主进程负责写入数据。程序会复制空目录,也可以设
    2019-11-10
  • golang中定时器cpu使用率高的现象详析

    golang中定时器cpu使用率高的现象详析

    前言: 废话少说,上线一个用golang写的高频的任务派发系统,上线跑着很稳定,但有个缺点就是当没有任务的时候,cpu的消耗也在几个百分点。 平均值在3%左右的cpu使用率。你没有任务
    2019-11-10