Go-知识依赖GOPATH

news2024/11/26 14:37:09

Go-知识依赖GOPATH

  • 1. 介绍
  • 2. GOROOT 是什么
  • 3. GOPATH 是什么
  • 4. 依赖查找
  • 5. GOPATH 的缺点

1. 介绍

早期Go语言单纯地使用GOPATH管理依赖,但是GOPATH不方便管理依赖的多个版本,后来增加了vendor,允许把项目依赖
连同项目源码一同管理。Go 1.11 引入了全新的依赖管理工具 Go Module ,知道 Go 1.14 , Go Module 才走向成熟。

2. GOROOT 是什么

通常安装 Go 语言,实际上安装的是 Go 编译器和 Go 标准库,二者位于同一个安装包中。
在Win中使用安装程序安装Go,那么会被默认安装到 c:\Go 目录下,这就是 GOROOT 目录,这个目录就是 GOROOT 目录,
里面保存了开发Go应用程序所需要的所有组件,比如编译器,标准库和文档。
GOROOT有点像JAVA_HOME。
另外安装程序会设置GOROOT环境变量,并且还会把%GOROOT%\bin加入到Path 环境变量中。
完全和Java一样。

3. GOPATH 是什么

安装完Go语言,接下来就要编写项目了。实际上Go语言项目是由一个或者多个package组成的,这些package安装来源分为这几种:

  • 标准库
  • 第三方库
  • 项目私有库

目前的编程语言基本上都可以这样分类。

其中标准库的 package 全部位于 GOROOT 环境变量指示的目录中,而第三方库和项目私有库都位于 GOPATH 环境变量所指示的目录中。

在安装Go 语言是,安装程序会设置一个默认的 GOPATH 环境变量
在这里插入图片描述

与 GOROOT不同的是,GOPATH环境变量是用户环境变量,不是系统环境变量,不同的用户可以设置不同的GOPATH,每个用户之间互不妨碍。

4. 依赖查找

当某个 package 需要引用其他包时,编译器就会依次从 GOROOT/src , GOPATH/src 中查找。
如果某个包从 GOROOT 下找到,就不在到 GOPATH 下查找。
也就是说,如果出现和标准库相同的依赖,那么标准库的优先级是最高的。 这点也和 Java 一模一样。

5. GOPATH 的缺点

GOPATH的优点是简单,但是不能很好地满足实际项目的工程需要。
比如有两个项目A和B,他们都引用某个第三方库T,但这两个项目使用了不同的T版本:

  • 项目A使用了 T v1.0
  • 项目B使用了 T v2.0

由于编译器依赖固定从 GOPATH/src 下查找 GOPATH/src/T ,无法再同一个GOPATH目录下保存第三方库T的两个版本。
所以项目A 和B 无法共享同一个 GOPATH ,需要各自维护一个。

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

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

相关文章

python发邮件附件:配置SMTP服务器与认证?

python发邮件附件技巧?Python发送多附件邮件的方法? Python作为一种强大的编程语言,提供了丰富的库和工具来实现这一功能。AokSend将深入探讨如何使用Python发邮件附件,并详细介绍配置SMTP服务器与认证的关键步骤。 python发邮件…

【CubeMLP】核心方法解读

abstract: 多模态情绪分析和抑郁估计是利用多模态数据预测人类心理状态的两个重要研究课题。以前的研究主要集中在开发有效的融合策略,以交换和整合来自不同模式的心智相关信息。一些基于mlp的技术最近在各种计算机视觉任务中取得了相当大的成功。受此启…

Pandas与JQData在量化投资中的应用:数据获取与处理函数详解

🌟作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~🍊个人主页:小高要坚强的博客🍓当前专栏:《Python之量化交易》🍎本文内容:Pandas与JQData在量化投资中的应用:数据获取与处理函数详解🌸作者“三要”格言:要坚强、要努力、要学习 目录 …

dvwa:暴力破解、命令注入、csrf全难度详解

暴力破解 easy模式 hydra -L /usr/share/wordlists/SecLists-master/Usernames/top-usernames-shortlist.txt -P /usr/share/wordlists/SecLists-master/Passwords/500-worst-passwords.txt 192.168.72.1 http-get-form "/dvwa/vulnerabilities/brute/:username^USER^&…

UDP和TCP的区别、网络编程(UDP回显服务器、TCP回显服务器)

目录 一、什么是网络编程 二、网络编程的内容概念 接受端和发送端 请求和响应 服务端和客户端 三、UDP和TCP协议的区别 四、UDP网络编程的类和函数(回显服务器) DatagramSocket DatagramPacket InetSocketAddress 基于UDP的回显服务器和客户…

​​​​​​​​​​Proxifier安装步骤

​​​​​​​​​​Proxifier ​​​​​​​​​​Proxifier下载连接 进入Proxifier官网后,点击下面按钮,下载安装包 下载完成后,打开压缩包 双击运行 选择试用 安装完成

Vue 3 全屏切换组件(附Demo)

目录 1. 基本知识2. 拓展3. 延伸 1. 基本知识 全屏 API document.documentElement.requestFullscreen():请求全屏模式 document.exitFullscreen():退出全屏模式 document.fullscreenElement:返回当前处于全屏状态的元素 基本的Demo如下&…

大模型进军医疗行业:实验揭示LLMs在临床建议中的表现

近年来,大型语言模型(LLMs)如GPT-4等以其强大的自然语言处理能力,引发了科技界和公众的广泛关注。随着技术的不断进步,越来越多的人开始探索将LLMs应用于医疗行业,以期提高医疗服务的效率和质量。然而&…

第170天:应急响应-战中溯源反制对抗上线CSGoby蚁剑Sqlmap等安全工具

目录 案例一:溯源反制-Webshell工具-Antsword 案例二:溯源反制-SQL注入工具-SQLMAP 案例三:溯源反制-漏洞扫描工具-Goby 案例四:溯源反制-远程控制工具-CobaltStrike 反制Server,爆破密码(通用&#x…

吴恩达演讲全文:AI Agent工作流的趋势

本文是吴恩达今年3月的演讲,题目为“Agentic Reasoning”,对AI Agent工作流的趋势进行了讲解。 本文对AI Agent翻译为了AI代理。 吴恩达指出,随着AI技术的发展,AI代理被视为一个能显著提升软件开发效率和质量的工具。 他通过展…

umi配置阿里云短信验证登录流程

首先 开通短信服务,融合认证,设置签名,模板,templateparams,调试板块可以发送成功并测试; s​​​​​​​​​​​​​​SendSmsVerifyCode_云通信号码认证服务_API调试-阿里云OpenAPI开发者门户 下图的s…

荆州团市委领导一行赴点赋科技公司参观考察

近日,荆州团市委书记熊燃、副书记陈杰一行前往点赋科技公司进行参观考察,为荆州科技领域与青年工作的交流合作开启新篇。 在考察过程中,熊燃书记和陈杰副书记深入点赋科技公司的办公区域、设备点位等进行实地走访。他们仔细聆听了公司董事长崔…

HUAWEI_HCIA_实验指南_Lib3.1_VLAN 基础配置及 Access 接口

1、原理概述 早期的局域网技术是基于总线型结构的。总线型拓扑结构是由一根单电缆连接着所有主机,这种局域网技术存在着冲突域问题,即所有用户都在一个冲突域中,那么同一时间内只有一台主机能发送消息,从任意设备发出的消息都会被…

Monad 101 杭州线下活动:解锁创新技术,引领低成本高效 DApp 开发之路!

以太坊等区块链在处理传统金融大规模交易时面临巨大挑战,有限的可扩展性成为阻碍其广泛应用的主要瓶颈。为了解决这一难题,并缩小传统金融与去中心化金融(DeFi)之间的差距,Keone 创立了 Monad。通过显著提升交易速度和…

STM32(十八):SPI通信

SPI通信: SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)主机输出从机输入、MISO&…

Idea 2024.2.3 找不到Cache Recovery设置

idea找不到官网所说的设置 下面是解决办法 1.找到对应位置 2.增加配置文件内容 idea.is.internaltrue3.重启idea 4.查看结果 解决方案原文

Android列表组件api

目录 1.ListView控件 1)android:divider 2)android:dividerHeight 3)android:entries 4)android:footerDividersEnabled 5)android:headerDividersEnabled 6)android:listSelector 7)android:sc…

JavaScript Set 必备指南:深入理解 Set 的特性和方法

一. 了解 Set 1. 概念和用途 Set 是 JavaScript 中的一种集合(collection)数据结构,它类似于数组,但是集合中的元素是唯一的,不允许重复。Set 提供了一种存储不重复数值或对象的机制,可以用于存储一组唯一…

【03】手把手教你0基础部署SpringCloud微服务商城教学-Docker前置篇(附Linux虚拟机配置调试及Docker安装全流程)

前文回顾:【02】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇(下) 首先我们第一次看见这个东西,第一步就是需要知道它到底是用来干什么的? 简单来说,Docker就是一个快速构建、运行、管理应用的…

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问 这样对于访问这…