Go modules replace解决Go依赖引用问题

为什么会用到 replace

取名是一个很有讲究的事情,但每个人都不一样。

  • 一开始,我写了一个 A 项目,代码仓名称为 project-alpha
  • 但 go.mod 里的 package 设置的是 github.com/k8scat/alpha,
  • 当在另一项目 B 中想要引用 A 项目的代码时,一般来说,用的是 github.com/k8scat/project-alpha
  • 因为 go get 会使用 git 去,但由于 package 和代码仓的名称不一样

需要使用 replace 进行转换一下:

package github.com/k8scat/beta
require github.com/k8scat/alpha v0.0.0
replace github.com/k8scat/alpha github.com/k8scat/project-alpha v1.0.0

使用 go mod edit 进行设置 replace:

go mod edit -replace github.com/k8scat/alpha=github.com/k8scat/project-alpha@v1.0.0

注意:该命令只会设置 replace,require 需要另外设置,且 require 的依赖版本被忽略,使用 replace 的依赖版本。

replace 的其他使用场景

解决 golang.org 依赖无法下载的问题

go mod edit -replace golang.org/x/crypto=github.com/golang/crypto@v0.0.0-20160511215533-1f3b11f56072

注意:这里目标依赖的版本号必须符合 SemVer 规范,不能是 master 和 latest(go get 可以用)

参考资料

以上就是Go modules replace解决Go依赖引用问题的详细内容,更多关于Go modules replace依赖引用的资料请关注我们其它相关文章!

(0)

相关推荐

  • Golang 1.16 中 Modules的主要变化更新

    01介绍 Golang 1.16 已经正式发布了,其中 Modules 有一些变化: 默认开启 Modules. 不自动修改 go.mod 和 go.sum. 通过指定 @version 后缀安装特定版本可执行文件. 新增 retract 指令撤回 Module 版本. 使用新增配置变量 GOVCS 指定特定模块使用特定版本控制工具. golang 1.16 默认开启 Modules,即使不存在go.mod,Go 命令现在默认情况下也会在module-aware(模块感知)模式下构建包. 在 g

  • go modules中replace使用方法

    目录 使用replace替换package 示例 使用replace替换package 因为某些未知原因,并不是所有的包都能直接用go get获取到,这时我们就需要使用go modules的replace功能了. replace顾名思义,就是用新的package去替换另一个package,他们可以是不同的package,也可以是同一个package的不同版本.看一下基本的语法: go mod edit -replace=old[@v]=new[@v] old是要被替换的package,new就是

  • golang 中strings包的Replace的使用说明

    函数声明为: func Replace(s, old, new string, n int) string 官方描述为: 返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串. 示例代码为,每行的结果见每行上面的注释部分: func main() { // non-overlapping: "123" repeat 6 times in s s := "123lafaldsjglad123lkfasdf123djfal123lkdjg

  • Goland使用Go Modules创建/管理项目的操作

    创建项目 Location:新项目文件夹GOROOT:go 安装根目录Proxy:https://goproxy.io,direct 重要:https://goproxy.io是下载go包的代理地址,设置后可在国内正常下载go仓库/github的包. 创建一个go文件 创建了一个test.go 下载安装需要的包 这里演示安装mysql driver包:github.com/go-sql-driver/mysql 直接import显示找不到包,使用左下方命令行工具,安装mysql driver 使

  • golang strings包的Replace的使用说明

    函数声明: func Trim(s string, cutset string) string 官方描述: 返回将 s 前后端所有 cutset 包含的 utf-8 码值都去掉的字符串. 示例代码: package main import ( "fmt" "strings" _ "test/subpac" ) func main(){ fmt.Println("[ !!! Achtung! Achtung! !!! ]:[]:[&quo

  • Go modules replace解决Go依赖引用问题

    为什么会用到 replace 取名是一个很有讲究的事情,但每个人都不一样. 一开始,我写了一个 A 项目,代码仓名称为 project-alpha 但 go.mod 里的 package 设置的是 github.com/k8scat/alpha, 当在另一项目 B 中想要引用 A 项目的代码时,一般来说,用的是 github.com/k8scat/project-alpha 因为 go get 会使用 git 去,但由于 package 和代码仓的名称不一样 需要使用 replace 进行转换一

  • python解决循环依赖的问题分析

    目录 python解决循环依赖 1.概述 2.循环引用介绍 2.1.python引入模块原理 3.解决循环引用方法 3.1.重构引入关系 3.2.调整import语句 3.3.把模块分成引入-配置-运行三个环节 3.4.动态引入 python解决循环依赖 1.概述 在使用python开发过程中在引入其他模块时可能都经历过一个异常就是循环引用most likely due to a circular import,它的意思就是A引用了B,反过来B又引用了A,导致出现了循环引用异常.下面来介绍如何避

  • 浅谈Spring解决循环依赖的三种方式

    引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种:构造器参数循环依赖 表示通过构造器注入构成的循环依赖,此依赖是无法解决的,只能抛出BeanCurrentlyIn CreationException异常表示循环依赖. 如在创建TestA类时,构造器需要TestB类,那将去创建TestB,在创建TestB类时又发现需要TestC类,则又去创建Test

  • 浅谈Spring如何解决循环依赖的问题

    在关于Spring的面试中,我们经常会被问到一个问题,就是Spring是如何解决循环依赖的问题的.这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能够一下子思考出个中奥秘.本文主要针对这个问题,从源码的角度对其实现原理进行讲解. 1. 过程演示 关于Spring bean的创建,其本质上还是一个对象的创建,既然是对象,读者朋友一定要明白一点就是,一个完整的对象包含两部分:当前对象实例化和对象属性的实例化.在Spring中,对象的实例化是通过反射实

  • Spring如何解决循环依赖的问题

    前言 在面试的时候这两年有一个非常高频的关于spring的问题,那就是spring是如何解决循环依赖的.这个问题听着就是轻描淡写的一句话,其实考察的内容还是非常多的,主要还是考察的应聘者有没有研究过spring的源码.但是说实话,spring的源码其实非常复杂的,研究起来并不是个简单的事情,所以我们此篇文章只是为了解释清楚Spring是如何解决循环依赖的这个问题. 什么样的依赖算是循环依赖? 用过Spring框架的人都对依赖注入这个词不陌生,一个Java类A中存在一个属性是类B的一个对象,那么我

  • spring解决循环依赖的简单方法

    Spring内部如何解决循环依赖,一定是单默认的单例Bean中,属性互相引用的场景.比如几个Bean之间的互相引用: 或者 setter方式原型,prototype 原型(Prototype)的场景是不支持循环依赖的,因为"prototype"作用域的Bean,为每一个bean请求提供一个实例,Spring容器不进行缓存,因此无法提前暴露一个创建中的Bean,会抛出异常. 构造器参数循环依赖 Spring容器会将每一个正在创建的Bean 标识符放在一个"当前创建Bean池&q

  • spring解决循环依赖

    概述 循环依赖就是依赖关系形成环,比如最简单的循环依赖:A对象依赖B,B对象依赖A 属性注入与循环依赖 如果是构造器注入,如果循环依赖对象没法构建,因为还未实例化 如果是属性注入但是作用域是prototype,spring不会缓存其对象实例,也不能处理循环依赖的情况 如果是属性注入singleton的,其bean的实例化过程与属性注入过程是分开的,并且spring提供了三个map(就是大家说三级缓存)来实现. spring属性注入处理循环依赖的方式 通过以下xml方式配置一个循环依赖的示例: <

  • Spring为何要用三级缓存来解决循环依赖问题

    我们都知道Spring为了解决循环依赖使用了三级缓存 Spring三级缓存 一级缓存singletonObjects 用于保存BeanName和创建bean实例之间的关系,beanName -> bean instance private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256); 二级缓存earlySingletonObjects 保存提前曝光的单例bean对象 private fin

  • spring 如何解决循环依赖

    首先解释下什么是循环依赖,其实很简单,就是有两个类它们互相都依赖了对方,如下所示: @Component public class AService { @Autowired private BService bService; } @Component public class BService { @Autowired private AService aService; } AService和BService显然两者都在内部依赖了对方,单拎出来看仿佛看到了多线程中常见的死锁代码,但很显然S

  • spring如何解决循环依赖问题详解

    循环依赖其实就是循环引用,很多地方都说需要两个或则两个以上的bean互相持有对方最终形成闭环才是循环依赖,比如A依赖于B,B依赖于C,C又依赖于A.其实一个bean持有自己类型的属性也会产生循环依赖. setter singleton循环依赖 使用 SingleSetterBeanA依赖SingleSetterBeanB,SingleSetterBeanB依赖SingleSetterBeanA. @Data public class SingleSetterBeanA { @Autowired

随机推荐