当前位置: 首页 > news >正文

Go语言中的包管理工具之Go Path的使用

GoLang 中常用的包管理的方式

1 )概述

  • 常用的有三种
    • Go Path
    • Go Vendor
    • Go Modules

2 )发展历程

  • 早期go的包管理存在很大缺陷,甚至可以说没有官方统一的包管理工具
    • 一方面官方在努力发布一些实验性的包管理工具。
    • 同时也出现了很多社区开发的包管理工具。
    • 在官方和社区的包管理工具中,仅官方推荐的就达15种之多。
      • 比如go path, godep,glide, go vendor等等。
  • 虽然在前期 Go包管理工具处于百家争鸣之态, 但是主流的go的包管理
  • 我们只需要记住下面这三种主要的
    • 第一个是 Go Path (从go诞生的时候就支持)
    • 第二个是 Go Vendor (从 go 1.5 版本开始)
    • 第三个是 Go Modules (从 go 1.11 才开始支持)

关于 Go Path

1 ) 概述

  • 我们先来看看go语言,刚发布阶段,是怎么去做包管理的
  • 在go语言的发布阶段,主要是通过 Go Path 模式来进行包管理
  • Go Path 是最早的依赖包管理方式。从 2009.11.10 随着第一个发布的第一个开源版本就有了
  • Go Path本质上它不算是go的包管理工具,它只是提供了一个存放包的路径的一个环境变量
  • Go Path 模式有一个很大的缺陷,就是它不支持依赖包的版本控制
  • 因为 Go Path 模式下,同一个包, 它的导入路径是一样的,这样也就不支持依赖包的不同版本

2 ) Go Path模式Go Path路径的区别

  • 需要注意的是,Go Path模式 和 Go Path路径是两个不同的概念
    • Go Path模式: 是指我们通过 Go Path, 来管理我们的包
    • Go Path路径, 指的是 Go Path 这个环境变量的路径
  • 不管我们使用哪种包管理方式都可以有 Go Path 路径, 其包管理方式
    • 可能依赖 Go Path 路径来实现
    • 也可能不需要 Go Path 路径
  • 并不是设置 Go Path 路径就一定使用了 Go Path 模式来管理我们的依赖包
  • 这一点是我们需要注意的

3 ) Go RootGo Path的区别

  • Go Root 是go的安装目录,存放的是go语言内置的开发包和工具类,就类似Java的JDK
  • Go Path是go语言指定的工作空间,用于存放go工程代码和第三方依赖包
  • 当然,如果我们使用 Go Modules 管理,我们的工程代码也没有必要一定要放在Go Path下
    • 需要注意的是,Go Path 目录和 Go Root 目录不能是同一个目录
    • 这样就会很容易导致项目中的包和标准库重名而造成编译出现问题
  • Go Path 是有默认值的,那在Go的1.8版本之前,Go Path 的环境变量默认是空的
    • 那从1.8版本开始呢,go开发包在安装完成之后,就会给 Go Path 一个默认的目录
  • 在Windows目录下,它的默认目录就是这个 %USERPROFILE%/go
    • 例如: c:\users\用户名\go
  • 在Unix类型的操作系统下面,那它是在home目录下面的go目录当中
    • 例如: /home/用户名/go
  • 我们可以通过 go env 指令来查看这两个环境变量的具体路径
    • Windows 上执行这个 go env 这个命令
    • Linux环境,比如 redhat
      • 先查看操作系统的版本 cat /etc/redhat-release
      • 我们再执行 go env | grep PATH

4 ) Go Pass是怎么配置的

  • 在linux环境当中,如果我们希望不同的用户具有不同的 Go Pass
  • 我们可以将 Go Pass 设置到这个 ~/.bash_profile 这个文件里面
    • 只会对当前登录的这个用户生效。比如当前登录的用户是张三
    • 那这种配置呢比较适合使用linux操作系统的开发者环境使用
  • 在线上部署的时候,我们可以设置到 /etc/profile 这个文件里面
    • 这个文件中的设置, 是对全部用户都是有效的
    • 同时, 我们又可以将 GOBIN 这个环境变量加入到 PATH 变量中
    • 可以在这个 etc/profile 这个文件末尾, 增加这三个go的环境变量, 举例~
      • export GOPATH = $HOME/mygopath$
      • export GOBIN = $GOPATH/bin$
      • export PATH = $PATH:$GOBIN$ 追加导出
  • 当我们开启了Go Path模式, 我们的工程代码就必须放在 Go Path 下面的 src 这个目录下面
    • 即: $GOPATH/src
  • 当我们用到一些第三方依赖包的时候, 就需要通过 go get 命令去拉取

相关文章:

Go语言中的包管理工具之Go Path的使用

GoLang 中常用的包管理的方式 1 )概述 常用的有三种 Go PathGo VendorGo Modules 2 )发展历程 早期go的包管理存在很大缺陷,甚至可以说没有官方统一的包管理工具 一方面官方在努力发布一些实验性的包管理工具。同时也出现了很多社区开发…...

cocos creator(2.4.7版本) webview 可以在上层添加UI控件

实现原理:cocos本身在平台中属于view,所以可以把webview放在底层,以达到目标。 实现过程:参考 cocos creator(2.4.7版本) videoplayer 可以在上层添加UI控件() 需要增加以下过程: …...

2023 年四川省职业院校技能大赛“信息安全管理与评估”样题

2023 年四川省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题 竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 第一阶段:模块一 网络平台搭建与设…...

ubuntu2204,mysql8.x安装

ubuntu 2204, MySQL8.x安装 sudo apt-get update sudo apt-get upgrade# 习惯性的先设置一下时区,这里我使用东八区 date -R # 若发现时间正常则无需设置tzselect# 依次选择 4 -> 10 -> 1 -> 1cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedate -R# 同步时间…...

CG Magic分享云渲染和本地渲染之间的区别有什么?

无论是效果图渲染还是影视渲染,对于3D设计师来说都是常见的渲染方式就是云渲染和本地渲染。 本地电脑渲染是指将渲染任务分配给本地计算机进行处理,而云渲染是指将渲染任务上传至云端服务器进行处理。 对于一些初入行业的新手朋友来说,会在想…...

【算法与数据结构】763、LeetCode划分字母区间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题要求为: 1.尽可能多的划分片段2.字母只能出现在一个片段中3.片段连接起来仍然是s&…...

新火种AI|人形机器人敲响上市罗,首日市值高达390亿港元

作者:一号 编辑:彩云 ​ 史上第一次!人形机器人在港交所和人类一起敲锣。 12月29日,在港交所现场,熊猫机器人优悠走上舞台,将手中的锣锤递给了优必选创始人、董事长兼CEO周剑,而同周剑一同准…...

SpringMVC框架

SpringMVC 三层架构MVC模式SpringMVC入门案例总结 三层架构 表现层(web) 页面数据的收集,产出页面 业务逻辑层(service) 业务处理 数据访问层(Dao) 数据持久化 MVC模式 SpringMVC 基于Java…...

FreeRTOS——计数型信号量知识总结及实战

1计数型信号量概念 1)计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源 2)适用场景: 事件计数: 当每次事件发生后,在事件处理函数中释放计数型信号量(计数值1&#x…...

Linux下Docker Engine安装后的一些配置步骤

一些安装后的配置令Linux主机可以更好地与Docker配合使用。 0x01 以非root用户身份管理Docker Docker守护进程绑定到Unix套接字,而不是TCP端口。默认情况下,root用户拥有Unix套接字,而其他用户只能使用 sudo. Docker守护进程始终以root用户身份运行。 …...

【并发设计模式】聊聊Balking是如何实现以及具体原理

前面的等待唤醒,其实是一个线程等待执行满足条件的逻辑,会一直死等,但是并不是全部的场景都需要死等。比如我们去坐车的时候,公交一直没来,那么就可以不去了。而等待唤醒是公交没来我就等他来了再去。 Guarded Suspen…...

dubbo的一些问题思考

1.dubbo是啥 Dubbo 是一个高性能的 Java RPC(远程过程调用)框架,用于构建分布式服务架构。由阿里巴巴开发并开源,作为一个分布式服务框架,Dubbo 提供了丰富的功能,包括服务治理、远程调用、负载均衡、容错机…...

盛最多水的容器(力扣11题)

例题: 分析: 这道题给出了一个数组,数组里的元素可以看成每一个挡板,要找到哪两个挡板之间盛的水最多,返回盛水量的最大值。这其实是一个双指针问题。 我们可以先固定第一个挡板( i )和最后一个挡板( j )&#xff0c…...

.babky勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 网络安全威胁不断进化,其中.babky勒索病毒引起了广泛关注。这篇文章91数据恢复将深入介绍.babky的狡猾特征,以及在遭受其袭击时如何高效地恢复被加密的数据,并提供实用的预防方法。当面对被勒索病毒攻击导致的数据文件加密…...

20240103-通过布局让自己的生活有有意义人生有价值

最近听到看到的一些词 心力、稀缺、卓有成效、知行合一、致良知、心即理、事上练 最近琢磨出这么一个道理,就是任何人做事情其实都有内心趋势和一套适合他自己的内心驱动的方法。我们经常意识不到,我时常也会去寻求做一件事,是不是有特定的…...

JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性

目录 前言 一、站在开发视角,从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a)简介 b)使用方法 c)使用场景 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 1.2.2、Opt…...

八股文打卡day11——计算机网络(11)

面试题:HTTP多个TCP连接怎么实现? 我的回答: 1.HTTP1.0的时候,一个TCP连接只能进行一次请求响应。可以建立多个连接到服务器,这样就可以同时进行多个请求响应,提高传输效率。 2.HTTP1.1推出了持久连接&am…...

在Android设备上设置和使用隧道代理HTTP

随着互联网的深入发展,网络信息的传递已经成为人们日常生活中不可或缺的一部分。对于我们中国人来说,由于某些特殊的原因,访问国外网站时常常会遇到限制。为了解决这个问题,使用代理服务器成为了许多人的选择。而在Android设备上设…...

Paddle3D 2 雷达点云CenterPoint模型训练

2 Paddle3D 雷达点云CenterPoint模型训练–包含KITTI格式数据地址 2.0 数据集 百度DAIR-V2X开源路侧数据转kitti格式。 2.0.1 DAIR-V2X-I\velodyne中pcd格式的数据转为bin格式 参考源码:雷达点云数据.pcd格式转.bin格式 def pcd2bin():import numpy as npimport…...

RabbitMQ集群的简单说明

1.普通集群(副本集群) 当集群中某一时刻master主节点宕机,可以对master中Queue中的消息进行备份。而就算master宕机了,从节点不会对外提供服务,等到master节点恢复后,系统才会恢复正常。 主从架构的缺点是队列中的消息只是位于主节…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...