【笔记】go语言--go语言的依赖管理
【笔记】go语言--go语言的依赖管理
GO语言的依赖管理
- 依赖的概念,依赖就是第三方的库,即别人已经做好的库
- 依赖管理的三个阶段 GOPATH,GOVENDOR, go mod
三个阶段 - GOPATH
GOPATH 默认在~/go(unix linux ) %USERPROFILE%\go(windows),坏处就是会不断地增加内容,以至于对其余功能造成影响
需要注意:是没有办法区分不同依赖的不同版本的
//go path 的一些命令
新建路径:export GOPATH=/Users/apple/Desktop/project/src
关闭电脑所有的 go env -w GO111MODULE = off
项目关闭 export GO111MODULE = offgo path
获取库 go get -u go.uber.org/zap
使用gopath对依赖的查找大致分为两个步:首先要去GOROOT下的src目录下查找,需要注意的是,gopath下必须建立src目录,然后去GOPATH下的src目录查找,如果找不到库的话,就要去看一下是不是对应的地方没有放好
每个项目都可以设置自己的gopath
问题:同一个目录下的两个工程依赖于不同版本的同一个库?
解决办法:针对GOPATH,在两个工程下放置各自的工程的对应版本的库,因为在编译时优先从各自的工作目录下查找对应的库。
单纯的GOPATH是不好处理的,此时也就引出了GOVENDOR
三个阶段 - GOVENDOR
- 每个项目有自己的vendor目录,存放第三方库
- 大量第三方依赖管理工具 : glide, dep, go dep,...
使用gopath+vendor对依赖的查找有三个步:首先去项目目录下的vendor目录查找,然后去GOROOT和GOPATH下的src目录下查找,一般来说依赖是下载到gopath目录,然后拷贝到项目下的vendor目录,可以使用依赖管理工具自动完成这个拷贝任务
三个阶段 - go mod
- 由go命令统一的管理,用户不必关心目录结构
- 初始化: go mod init
- 增加依赖: go get
//一些命令
新建mod :go mod init XXX
升级修改go.uber.org/zap v1.20.0版本:go get -u go.uber.org/zap@v1.12.0
清除掉不用的历史版本数据:go mod tidy
旧项目迁移:go mod init XXX,go build ./...;完成后vendor、glide等都可以删除了;
之前做过glide、dep之类的依赖管理,go mod 会自动迁移过来;
添加外部依赖的两个方法:1.使用go get;2.直接在代码中import依赖,然后build
//引用项目的包
import的路径 = go.mod下的module name + 包相对于go.mod的相对目录
目录的整理
- go build 构建当前目录,当前目录不允许多个main函数
- go build ./... 构建当前目录以及子目录,该方式不产生结果,只是检查编译
- go install ./... 产生编译结果,存放在gopath/bin目录下
【笔记】go语言--go语言的依赖管理的更多相关文章
- Gradle系列教程之依赖管理(转)
转自Lippi-浮生志 :http://ezlippi.com/blog/2015/05/gradle-dependency-management.html 这一章我将介绍Gradle对依赖管理的强大 ...
- Gradle实战教程之依赖管理
这是从我个人网站中复制过来的,原文地址:http://coolshell.info/blog/2015/05/gradle-dependency-management.html,转载请注明出处. 简要 ...
- Gradle系列教程之依赖管理
这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定位不同类型仓库.依赖管理看起来很容易,但是当出现依赖解析冲突时就会很棘手,复杂的依赖关系可能导致构建中依赖一个库的多个版本.Gradle ...
- Go语言之依赖管理
Go语言之依赖管理 Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个 ...
- GO学习-(22) Go语言之依赖管理
Go语言之依赖管理 Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个 ...
- Go语言系列之依赖管理
依赖管理 为什么需要依赖管理? 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解 ...
- 《30天自制操作系统》笔记(02)——导入C语言
<30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ...
- Gradle笔记——依赖管理基础
1. 什么是依赖管理 依赖管理可以分为两部分:一是依赖,即项目构建或运行时所需要的一些文件:二是发布,即构建完成后上传到某个地方. 1.1 依赖 大部分的项目都需要第三方库类或项目文件,这些文件就是项 ...
- [编程笔记]第一章 C语言概述
//C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
随机推荐
- F12 Preserve log 查看之前的api接口返回数据,只有火狐浏览器能用
F12 Preserve log 查看之前的api接口返回数据,只有火狐浏览器能用
- WOX 和 everything 差不多,挺不错也
WOX 和 everything 差不多,挺不错也
- day03-1-查看账单&结账功能
满汉楼03 4.功能实现05 4.8查看账单功能 按照之间搭建起来的框架,在BillService编写方法 4.8.1代码实现 1.修改Bill类 重写Bill类中的toString方法 @Overr ...
- 大年学习linux(第四节---文件权限)
四.文件权限 文件类型 Linux文件类型和linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如 file.txt.file.tar.gz ,这些文件虽然要用不同的程序 ...
- 3DCAT+上汽奥迪:打造新零售汽车配置器实时云渲染解决方案
在 5G.云计算等技术飞速发展的加持下,云渲染技术迎来了突飞猛进的发展.在这样的背景下,3DCAT应运而生,成为了业内知名的实时云渲染服务商之一. 交互式3D实时云看车作为云渲染技术的一种使用场景,也 ...
- 【3D可视化】3D可视化在智慧园区的应用
随着5G运用和新基建政策,构建智慧城市系统成为当下城市管理的热门需求,智慧园区建设的核心是3D可视化平台,利用它可以提高企业园区智能化.3D数字化管理服务水平. 一.智慧园区概念 "3D可视 ...
- 记一次 .NET某施工建模软件 卡死分析
一:背景 1. 讲故事 前几天有位朋友在微信上找到我,说他的软件卡死了,分析了下也不知道是咋回事,让我帮忙看一下,很多朋友都知道,我分析dump是免费的,当然也不是所有的dump我都能搞定,也只能尽自 ...
- 恶意软件开发(一)Reverse Shell
什么是Reverse Shell? 反向 Shell(Reverse Shell)是指远程攻击者在攻击成功后,通过建立一个反向连接,让受害者的机器连接到攻击者的机器上,从而达到控制受害者机器的目的.通 ...
- TP6框架--EasyAdmin总结:暂时的离别和新的开始
眨眼一下,因为项目初期开发的完成,我与EasyAdmin的缘分也将迎来短暂的离别,有时候静下来,感觉时间过的好快,我从4月到现在,使用EasyAdmin进行项目开发,从一个初识别PHP的菜鸟,到一个能 ...
- .Net 8.0 下的新RPC,IceRPC之接口定义语言 [Slice] VS [Protobuf]
作者引言 很高兴啊,我们来到了接口定义语言(IDL)篇,RPC之基石,有了它,可以在各种各种语言中实现RPC通讯. Slice 和 Protobuf 是什么? IceRPC的核心是一个面向字节byte ...