【笔记】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 ...
随机推荐
- FastGithub.UI64位中文版V2.1.4绿色版 - 软件推荐
推荐理由 相对于改hosts,这个更好用 FastGithub.UI64位中文版V2.1.4绿色版 https://www.cr173.com/soft/670733.html
- ECharts 中国地图 vue
<template> <div> <div id="china_map_box"> <div id="china_map&quo ...
- rancher添加用户报错x509: certificate has expired Internal error occurred: failed calling webhook "rancherauth.cattle.io":
错误信息: Internal error occurred: failed calling webhook "rancherauth.cattle.io": Post https: ...
- day04-3服务器推送新闻
多用户即时通讯系统04 4.编码实现03 4.7功能实现-服务器推送消息功能实现 4.7.1思路分析 服务器推送新闻,本质其实就是群发消息 在服务器启动一个独立线程,专门负责推送新闻 该线程通过管理线 ...
- AI 学习时代:大语言模型领域的行业黑话和专业术语解析
近年来,深度学习技术的快速发展带动了大语言模型在自然语言处理领域的广泛应用.在这个激动人心的领域里,我们常常会遇到一些行业黑话和专业术语.为了帮助大家更好地入门,让我们深入探讨一些关键概念,以及它们在 ...
- 3DCAT+上汽奥迪:打造新零售汽车配置器实时云渲染解决方案
在 5G.云计算等技术飞速发展的加持下,云渲染技术迎来了突飞猛进的发展.在这样的背景下,3DCAT应运而生,成为了业内知名的实时云渲染服务商之一. 交互式3D实时云看车作为云渲染技术的一种使用场景,也 ...
- 瑞云科技荣获全国电子信息行业专精特新“最具创新价值 TOP20”!
"专精特新",从概念提出到写入政府工作报告走过了十年.这十年来我国促进中小企业发展力度之大.出台政策之密集.含金量之高前所未有,足见走专精特新发展之路深入人心."专精特新 ...
- 记录--短视频滑动播放在 H5 下的实现
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 短视频已经无数不在了,但是主体还是使用 app 来承载的.本文讲述 H5 如何实现 app 的视频滑动体验. 无声胜有声,一图顶百辩,且看 ...
- rust结构体包含另一个结构体引用时,serde序列化问题
代码如下 use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] struct Person { id: Stri ...
- postgresql关于array类型有交集(包含查询数据任意元素,有重叠&&)的一些查询方法以及sqlalchemy语句实现
表接结构如下 class MachineFixDoc(Base): """ 设备报修单,代理或用户向公司申请报修 """ __tablena ...