【笔记】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 ...
随机推荐
- 新博客 VuejsDev.com 用于梳理知识点
新博客 VuejsDev.com 用于梳理知识点 https://www.vuejsdev.com/ 后期没有精力发布了,迁移到博客园了,防止服务器到期~ [VueJsDev] 目录列表 https: ...
- gulp-imagemin版本9图片压缩
由于网上大多数的博文已经比较久,参考性不大 版本 gulp PS D:\XXX\github\hexo> gulp -v CLI version: 2.3.0 Local version: 4. ...
- 掌握 Kubernetes 故障排除技巧:kubectl命令的基本指南
Kubernetes 彻底改变了容器编排,简化了应用程序的管理和扩展.然而,与任何复杂系统一样,Kubernetes 集群也会遇到问题,需要及时解决才能保持最佳性能和可靠性.在本文中,我们将深入探讨必 ...
- d3d12龙书阅读----d3d渲染流水线
d3d12龙书阅读----d3d渲染流水线 输入装配器阶段 在输入装配器阶段,会从显存中读取顶点与索引这种几何数据,然后根据图形基元的类型,根据索引将顶点组装起来. d3d中的图形基元 我们来看看几种 ...
- npm ERR! code ENOENT npm ERR! syscall open npm ERR! path C:\Users\shuzi\Desktop\保密文件项目\test-ui/package.json npm ERR! errno -4058
打开一个新的项目,因为当前项目文件夹下没有npm,"dev": "npm run start:dev",所以所以没有展示对应的运行图,如下图: 打开一个新的前端 ...
- Docker Commands Diagram
- KingbaseESV8R6手工vacuum带有全局分区索引的分区表的影响
背景 客户现场有这样一个案例,有张500个分区的大表,每个分区有20万条记录.有update 非常频繁,经常会触发autovacuum.由于表很大,autovacuum 耗时很长.据现场同事反馈,手工 ...
- Python爬虫爬取京东某商品评论信息存入mysql数据库
1 """ 2 https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_com ...
- mybatis一次执行多条SQL语句报错
如果这样来写一个 mapper 1 <update id="createTable3" parameterType="map"> 2 drop ta ...
- NUMA 平台
What is NUMA? This question can be answered from a couple of perspectives: the hardware view and the ...