go包管理

golang包管理的方式有哪些?

  1. Golang包发展历史
    官方推荐的有很多包管理方式:
    主要有几种:
    GOPATH、Godep、Glide、Govendor、GOModules
    记住这几种
    GOPATH < GO1.5 GOVendor >=GO1.5 GOModules >=GO1.11

GOPATH模式
go语言诞生就有 2009.11.10
通过统一包存放路径实现包管理
不支持依赖包的版本控制

GOPATH模式和GOPATH路径的区别?
GOPATH模式 通过GOPATH来管理包
GOPATH路径 GOPATH这个环境变量的路径

GOROOT和GOPATH的区别?
GOROOT是Golang的安装目录
GOPATH是Go语言指定的工作空间

注意:GOPATH跟GOROOT不能是同一个目录

GOPATH配置
~/.bash_profile(linux只对当前登录用户生效)文件或者/etc/profile文件

/ect/profile文件
export GOPATH= H O M E / u s e r g o p a t h e x p o r t G O B I N = HOME/usergopath export GOBIN= HOME/usergopathexportGOBIN=GOPATH/bin
export PATH= P A T H : PATH: PATH:GOBIN

开启了GOPATH模式下:
工程代码必须在GOPATH/src文件夹下面

go get命令

  1. 将远程代码克隆到$GOPATH/src目录下
  2. 执行go install 命令
  3. 可以指定-d命令参数仅下载不安装

go install 命令:

  1. 可执行和生成的二进制文件,存放在$GOPATH/bin下
  2. 普通包,编译生产的.a结尾的文件放到$GOPATH/pkg下

如何判断一个包是否生成二进制文件?
main包中存在main函数下的情况下,才能生成可执行文件

注意:go install是建立在GOPATH上的,无法单独使用
go install 命令:
是建立在GOPATH上的,无法单独使用
生成的可执行文件和包名一致
输出的目录是不支持通过命令指定的

思考:
为什么go get有 install还需要 一个单独的install指令?
go get是远程依赖包
本地包直接用 go install就可以

go build 命令:
默认是在当前目录下编译生成可执行文件,可以指定文件
不会将可执行文件复制到$GOPATH/bin目录下

go run 命令:
编译并运行go文件的
不依赖GOPATH
只能编译可执行的go文件

GOPATH目录
src存放源代码文件
pkg存放编译后的文件
bin存放编译后的可执行文件

Godep
2013年诞生,一个社区开发的第一个包管理工具
通过扫描并记录版本控制信息,再配合go命令加壳实现
源码存放在 Godeps/workspace/并作为GOPATH
缺点 没有解决依赖包问题

Glide
2014年诞生
通过glide.yaml记录包的版本依赖信息,glide.lock文件追踪每个包的具体修改
有点像node的里面的nvm

Govendor
2015年8月19日 GO15VENDOREXPREMIMENT=1开启
go 1.6默认开启
go 1.7作为功能支持,取消这个变量

本质 将源码拷贝到vendor目录并维护vendor.json文件,指定包版本

Govendor用法
安装 go get -u github.com/kardianos/govendor
初始化工程 govendor init
依赖包导入 vendor目录 govendor add + external
移除依赖 govendor remove + unused
依赖查找顺序: vendor目录(没有) ->GOPATH(没有)->(GOROOT)
缺点:包的依赖不能重用,包冗余度提升,冲突不能很好解决

  1. Go Modules

2018年 go1.11发布 GO111MODULE=on开启
1.13开始go modules默认启用

gomodules的用法:
on开启 Gomodules
off关闭
auto 根据项目是否在GOPATH目录决定
export GO111MODULE=on (unix环境)
set GO111MODULE=on windows
go env -w GO111MODULE=on

注意:除了这样开启管理,需要通过go mod init初始化工程文件
这样就成功建立了一个标准的go modules工程

go mod常用指令
go mod init 初始化
go mod tidy 可以增加依赖和移除本工程没有用的信息
go mod download 下载依赖包到本地缓存
go mod vendor 兼容go vendor模式

go.mod文件是什么时候生成的?有什么作用?有哪些内容?
go mod init的时候生成的
存放依赖信息

go.sum文件什么时候生成的?作用?内容?哈希值?包校验?
包伪版本号
v0.0.0-2015… -q111
版本号 UTF提交时间 哈希值前缀
包校验?
若有本地缓存有依赖包,计算包的hash并与go.sum记录对比
依赖包版本中任何一个文件(包括go.mod)都会改变hash值
校验的目的 保证项目所有依赖的那些模版版本不会被篡改
公网可下载的包回去GO校验数据库取模块的校验和

不会对依赖包进行哈希校验
GOPRIVATE匹配到的包 不走PROXY的代理 不会上传到github中的代码
打包到vendor目录中的包
GOSUMDB设置为off 关闭go sum校验

注意 同一模块版本的数据只缓存一份,所有其它模块共享使用
清除包缓存:go clean -modcache
为什么go.sum中版本数量会比go.mod多?
go.mod只在依赖包不含go.mod文件时,才会记录间接依赖包版本
go.sum则是要记录构建用到的所有依赖包版本

关闭依赖包校验
go env -w GOSUMDB =of
export GOSUMDB=off unix环境

依赖包存储目录 GOPATH模式下 依赖包 GOPATH/src
依赖包存储目录 GOMODULE模式下 依赖包 GOPATH/pkg/mod

构建go项目的一些原则和建议
一个目录名下只能有一个package
一个package名的内容放在一个目录下面
目录名和package名相同

  1. 发展历史总结
    GOPATH go <1.5版本 2009.11.10
    GOVendor go >=1.5版本 2015.8.19
    GoModules go >=1.11版本 2018.8.24

  2. 如何使用内部包
    internal文件夹包
    internal控制包的可见性
    go 1.4 可以使用internal文件限制包的导入权限
    internal文件夹内的包只能被其父目录下的包或子包导入

内部开发的包
b本地包的方式导入 replace

通过私有仓库的方式导入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新生报到系统2024((代码+论文+ppt)

下载在最后 技术栈: ssmmysqljsp 展示: 下载地址: CSDN现在上传有问题,有兴趣的朋友先收藏.正常了贴上下载地址 备注:

docker安装部署elasticsearch7.15.2

docker安装部署elasticsearch7.15.2 1.拉取es镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2如果不想下载或者镜像拉去太慢可以直接下载文章上面的镜像压缩包 使用镜像解压命令 docker load -i elasticsearch-7-15-2.tar如下图所示就表示镜像解压成…

Qt+OpenCascade开发笔记(二):windows开发环境搭建(二):Qt引入occ库,搭建基础工程模板Demo和发布Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140763014 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

51单片机嵌入式开发:19、STC89C52R控制LCD1602码表+数码管+后台数显(串口)

STC89C52R控制LCD1602码表数码管后台数显&#xff08;串口&#xff09; 1 概述1.1 项目概述1.2 项目组成部分1.3 功能描述 2 开发环境2.1 支持设备2.2 硬件电路 3 软件代码工程4 演示4.1 Proteus仿真4.2 实物演示 5 总结 1 概述 1.1 项目概述 本项目旨在利用STC89C52R单片机实…

Elasticsearch 与 MySQL 在查询和插入性能上的深度剖析

在当今的数据处理领域&#xff0c;选择合适的数据库对于应用的性能和效率至关重要。Elasticsearch 和 MySQL 作为两款常用的数据库&#xff0c;它们在查询和插入操作上的性能表现各有千秋。本文将对这两款数据库在这两个关键操作上进行详细的对比分析。 一、引言 随着数据量的…

Postman API版本兼容性测试:确保无缝集成的策略

Postman API版本兼容性测试&#xff1a;确保无缝集成的策略 在API开发过程中&#xff0c;随着时间的推移&#xff0c;API会经历多个版本的迭代。确保新版本与旧版本之间的兼容性对于维护现有用户基础和集成至关重要。Postman提供了多种工具和功能&#xff0c;可以帮助测试人员…

FastDDS中的线程梳理

目录 线程预览 我们承担ROS&#xff0c;FastDDS&#xff0c;C&#xff0c;cmake等技术的项目开发和专业指导和培训&#xff0c;有10年相关工作经验&#xff0c;质量有保证&#xff0c;如有需要请私信联系。 线程预览 NameTypeCardinality线程名DescriptionEventGeneral每个Dom…

后端笔记(1)--javaweb简介

1.JavaWeb简介 ​ *用Java技术来解决相关web互联网领域的技术栈 1.网页&#xff1a;展现数据 2.数据库&#xff1a;存储和管理数据 3.JavaWeb程序&#xff1a;逻辑处理 2.mysql 1.初始化Mysql mysqld --initialized-insecure2.注册Mysql服务 mysqld -install3.启动Mysql…

USB3.0的等长要求到底是多少?

USB2.0与USB3.0接口的PCB布局布线要求PCB资源PCB联盟网 - Powered by Discuz! (pcbbar.com) 90欧姆阻抗&#xff0c;走差分线&#xff1a; 重点来了&#xff1a;

第十九届全国大学生智能汽车竞赛地平线创意组在武汉理工大学隆重开幕

7月27日上午&#xff0c;第十九届全国大学生智能汽车竞赛地平线创意组智慧医疗赛道全国选拔赛开幕式隆重举行&#xff0c;大赛由中国自动化学会、第十九届全国大学生智能汽车竞赛组织委员会主办&#xff0c;武汉理工大学、地平线、古月居承办。首年即吸引来自全国各地280支队伍…

每日一题——第三十五题

题目&#xff1a;有一个文本文件numbers.txt&#xff0c;其中有20个整数&#xff0c;每个整数占一行&#xff0c;编写程序将这些整数从小到大顺序排好后&#xff0c;重新写入到该文件中&#xff0c; 要求排序前和排序后都要输出该文件的内容。 #include<stdio.h> #inclu…

国内乳品领军企业『君乐宝』SRM一期项目成功上线,企企通助力企业采购数字化再升级,二期项目正式启航!

近日&#xff0c;企企通为君乐宝乳业集团&#xff08;以下简称“君乐宝”&#xff09;打造的采购供应链管理系统一期项目成功上线运行&#xff0c;基于双方的信任基础与协作模式将再次携手深化合作&#xff0c;构建全品类、全流程、全场景、全模式的采购数字化管理闭环&#xf…

如何为 5G 小型基站部署选择振荡器

5G 网络频谱频率更高、覆盖范围更短&#xff0c;因此比前几代网络密度更高。超高速 5G 回程 (mmWave) 在很大程度上依赖于小型基站&#xff0c;不仅是为了覆盖范围&#xff0c;也是为了速度。除此之外&#xff0c;O-RAN 联盟等举措为 RAN 生态系统提供了更多选择&#xff0c;但…

Scrapy + Django爬虫可视化项目实战(一)

目录 一、项目介绍 (一) 项目背景 (二) 项目介绍 二、系统实现 (一) 爬虫 1. 实现步骤 一、爬取字段 二、分析页面 三、具体实现 2. 爬虫结果 系列文章 Python升级打怪—Django入门 Python升级打怪—Scrapy零基础小白入门 实现技术 ScrapyDjangoEcharts 一、项目…

CSS(五)——CSS Fonts(字体)

CSS 字体 CSS字体属性定义字体&#xff0c;加粗&#xff0c;大小&#xff0c;文字样式。 CSS字型 在CSS中&#xff0c;有两种类型的字体系列名称&#xff1a; 通用字体系列 - 拥有相似外观的字体系统组合&#xff08;如 "Serif" 或 "Monospace"&#x…

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day5 全网最快最全

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会…

hadoop学习(一)

一.hadoop概述 1.1hadoop优势 1&#xff09;高可靠性&#xff1a;Hadoop底层维护多个数据副本&#xff0c;即使Hadoop某个计算元素或存储出现故障&#xff0c;也不会导致数据的丢失。 2&#xff09;高扩展性&#xff1a;在集群间分配任务数据&#xff0c;可方便扩展数以千计…

SPSS个人版是什么软件

SPSS是一款数据统计、分析软件&#xff0c;它由IBM公司出品&#xff0c;这款软件平台提供了文本分析、大量的机器学习算法、数据分析模型、高级统计分析功能等&#xff0c;软件易学且功能非常强大&#xff0c;可以使用SPSS制作图表&#xff0c;例如柱状、饼状、折线等图表&…

【Drools】(一)基于业务需求动态生成 DRT 规则模板:事实与动作定义详解

&#xff08;一&#xff09;基于业务需求动态生成 DRT 规则模板&#xff1a;事实与动作定义详解 背景 在业务规则管理中&#xff0c;DRT 文件&#xff08;Drools Rule Template&#xff09;用于定义和重用规则模板&#xff0c;这些模板可以动态地根据实际业务需求进行填充和生…

Android 10.0 Launcher 启动流程

在前面SystemUI启动流程中说到&#xff0c;在SystemServer中会去启动各种系统服务&#xff0c;这里的launcher也是启动的其中一个服务ActivityManagerService去启动的。在android10之前&#xff0c;系统四大组件的启动都是在ActivityManagerService中&#xff0c;在android10中…