Go-知识依赖GOPATH

news/2024/10/15 11:42:25/

Go-知识依赖GOPATH

1. 介绍

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

GOROOT__4">2. GOROOT 是什么

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

GOPATH__11">3. GOPATH 是什么

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

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

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

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

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

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

4. 依赖查找

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

GOPATH__32">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.ppmy.cn/news/1539414.html

相关文章

PL/SQL Developer如何连接Oracle数据库(汉化)

简介 PL/SQL Developer是一种用于Oracle数据库开发的集成开发环境(IDE)。它提供了一个可视化的界面,使开发人员能够方便地编写、调试和执行PL/SQL代码。PL/SQL Developer还具有其他功能,如数据库对象浏览器、SQL编辑器、数据导入…

P2056 [ZJOI2007] 捉迷藏 题解

P2056 [ZJOI2007] 捉迷藏 题面: 题目描述 Jiajia 和 Wind 是一对恩爱的夫妻,并且他们有很多孩子。某天,Jiajia、Wind 和孩子们决定在家里玩捉迷藏游戏。他们的家很大且构造很奇特,由 N N N 个屋子和 N − 1 N-1 N−1 条双向走廊…

【Vue】Vue3.0(十一)Vue 3.0 中 computed 计算属性概念、使用及示例

上篇文章:【Vue】Vue3.0(十)toRefs()和toRef()的区别及使用示例 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年10月15日10点23分 文章目录 Vue 3.0中…

19 Shell Script awk命令

Shell Script awk命令 一、awk 一)awk介绍 ​ awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分…

docker方式k8s环境搭建及pod简介

目录 一 搭建环境准备 二 搭建步骤 三 pod简介 3.1 pod介绍 3.2 pod配置 3.3 pod生命周期 3.4 pod调度 一 搭建环境准备 1.1 关闭防火墙和selinux,有自己搭建好的harbor仓库 1.2 先禁用服务器的交换分区(如果服务器内存不够,k8s使用交…

理解Token和Session:鉴权与会话管理的区别

理解Token和Session:鉴权与会话管理的区别 在Web应用和API设计中,鉴权与会话管理是两个核心概念,它们对于确保用户身份的安全性和维护用户会话状态至关重要。Token和Session是两种常用的鉴权与会话管理机制,它们各自具有独特的工…

揭秘网络流量分析系统:保障IT运维稳定的幕后英雄

AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 在现代企业的IT运维中,保障网络的稳定运行和业务的连续性是重中之重。网络流量的监控和优化不仅能提升网络性能,还能帮助及时发现潜在故障,防止网络瘫痪。因此&#xff0c…

UE5运行时动态加载场景角色动画任意搭配-场景角色相机动画音乐加载方法(三)

1、将场景打包为Pak并加载 1、参考这篇文章将场景打包为pak,UE4打包并加载Pak-Windows/iOS/Android不同平台Editor/Runtime不同运行模式兼容 2、在Mount Pak后直接打开Map即可 void UMapManager::OpenMap(FString Path) {UWorld* World = UGlobalManager::GetInstance()->…