Golang笔记:包管理机制

2024-03-31 20:58
文章标签 golang 笔记 管理机制

本文主要是介绍Golang笔记:包管理机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Go语言使用包组织源代码,并实现命名空间的管理。Go不强制包名和所在目录同名,但好的工程实践建议同名。包定义不包括目录路径,但引用一般是相对GOPATH的全路径引用,所以包一般都会放在公司或个人的域名目录下。

包引用

  • Go语言自带标准库的包在$GOROOT/src下面,可直接引用;
  • 自定义的包和第三方包需要放在$GOPATH/src下面才能被引用;

引用了包,但是代码中没有用到,编译器会报错。
如果是为了仅仅是为了使用包里面的 init 函数,可以通过import _ packageName 的方法。

包依赖

Golang项目开发中,如果涉及到了多个git库的project,每个project又有各自的第三方依赖。考虑到每台机器的GOPATH的全局共享,第三方包也是随着各自project的版本一一对应依赖,这时就用到了vendor和dep。

vendor

Go寻找包依赖,是从环境变量$GOPATH/src指定的位置寻找的,而且第三包存放的目录路径相对GOPATH是不能随便改的,因为这是import导入路径时的一部分。但是GOPATH是全局的,如果GOPATH下有两个项目都依赖了同一个第三方包的不同版本,直接把第三方包放到GOPATH下,就无法解决这个问题了。Go为了解决这个问题引入了vendor机制。

Go 1.5版本引入vendor机制,在1.6版本默认开启。有了vendor机制后,Go编译时就优先从项目源码树根目录下的vendor目录查找代码,如果没有,再去GOPATH中去查找。这样的查找依赖顺序就解决了同一个GOPATH下不同的项目对个子依赖的第三方包的解耦管理。比如:ProjectA 依赖 C1,Project B依赖C2,那么把C1和C2放到各自项目下的vendor目录即可。

有了vendor后第三方包查找顺序:

  1. 当前包下有vendor目录,则从其下面查找第三方包;没有找到下一步;
  2. 沿当前包目录逐级目录向上查找vendor目录,直到$GOPATH/src/的vendor,只要找到vendor就去下面查找;
  3. $GOPATH下查找;
  4. $GOROOT下查找;

dep

有了vendor后,还不能解决同一个项目对依赖的第三方包的版本管理,这时可以用官方的 dep 来配合。

dep的官方介绍:https://golang.github.io/dep/docs/introduction.html

使用go get获取dep:

go get -u github.com/golang/dep/cmd/dep

安装成功后:

  1. GOPATH/src下会有github.com/golang/dep目录,默认是master分支
  2. GOPATH/bin下会有对应的可执行文件,把这个目录加到系统PATH环境变量,就可以直接命令执行;
    查看版本的方法同查看go版本的方法一样,godep version即可查看。

对于go get,获取的第三方包在GOPATH下,如上面例子直接被所有工程共享。

使用dep可以做到第三方包的精细管理。使用 dep init 初始化工程,新老工程都行,然后会有三个文件:

Gopkg.toml     // 用户来配置依赖的 source/branch/version等,学好vim快速修改配置文件,哈哈~
Gopkg.lock     // 自动生成,不可以修改,描述当前工程的第三方包版本试图
vendor         // 跟前面的vendor是一样的

dep init 做了如下事情:

  • Look for existing dependency management files to convert
  • Check if your dependencies use dep
  • Identify your dependencies
  • Back up your existing vendor/ directory (if you have one) to _vendor-TIMESTAMP/
  • Pick the highest compatible version for each dependency
  • Generate Gopkg.toml (“manifest”) and Gopkg.lock files
  • Install the dependencies in vendor/

具体用法可以看官方文档。

参考:

  • Go语言核心编程
  • Go的包管理工具(一)
  • Golang依赖管理工具:Dep

这篇关于Golang笔记:包管理机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865325

相关文章

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

DDS信号的发生器(验证篇)——FPGA学习笔记8

前言:第一部分详细讲解DDS核心框图,还请读者深入阅读第一部分,以便理解DDS核心思想 三刷小梅哥视频总结! 小梅哥https://www.corecourse.com/lander 一、DDS简介         DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有低成本、低功耗、高分辨率、频率转换时间短、相位连续性好等优点,对数字信

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

【软考】信息系统项目管理师(高项)备考笔记——信息系统项目管理基础

信息系统项目管理基础 日常笔记 项目的特点:临时性(一次性)、独特的产品、服务或成果、逐步完善、资源约束、目的性。 临时性是指每一个项目都有确定的开始和结束日期独特性,创造独特的可交付成果,如产品、服务或成果逐步完善意味着分步、连续的积累。例如,在项目早期,项目范围的说明是粗略的,随着项目团队对目标和可交付成果的理解更完整和深入时,项目的范围也就更具体和详细。 战略管理包括以下三个过程

【软考】信息系统项目管理师(高项)备考笔记——信息化与信息系统

信息化与信息系统 最近在备考信息系统项目管理师软考证书,特记录笔记留念,也希望可以帮到有需求的人。 因为这是从notion里导出来的,格式上可能有点问题,懒的逐条修改了,还望见谅! 日常笔记 核心知识 信息的质量属性:1.精确性 2.完整性 3.可靠性 4.及时性 5.经济性 6.可验证下 7.安全性 信息的传输技术(通常指通信、网络)是信息技术的核心。另外,噪声影响的是信道

flex布局学习笔记(flex布局教程)

前端笔试⾯试经常会问到:不定宽⾼如何⽔平垂直居中。最简单的实现⽅法就是flex布局,⽗元素加上如下代码即 可: display: flex; justify-content: center; align-items :center; 。下⾯详细介绍下flex布局吧。   2009年,W3C提出了 Flex布局,可以简便⼂完整⼂响应式地实现各种页⾯布局。⽬前已得到了所有浏览器的⽀持,这意味着,现