Windows 安装 Go1.20.3 顺便了解 go env 环境变量

news2024/11/15 12:49:50

文章目录

  • 1.下载与安装
  • 2.GOROOT
  • 3.Go 的包管理
    • 3.1 GOPATH 模式
    • 3.2 Go Modules 模式
  • 4.GOPATH
  • 5.GO111MODULE
  • 6.GOPROXY
  • 7.GOSUMDB
  • 8.GONOPROXY/GONOSUMDB/GOPRIVATE
  • 9.GOMODCACHE
  • 10.GOCACHE
  • 11.GOENV
  • 12.GOBIN
  • 13.参考资料

1.下载与安装

参考文章:Golang V1.19.1 安装配置 (windows)

Go 官网下载地址:https://golang.google.cn/dl/

在这里插入图片描述

下载完成后会得到 go1.20.3.windows-amd64.msi 这个文件,直接双击运行,进入如下界面,点击 Next。

在这里插入图片描述

默认勾选了 “I accept the terms in the License Agreement”,点击 Next。

在这里插入图片描述

Go 默认安装在 C 盘,可以更改一下 Go 的安装路径,然后点击 Next。

注意:这里设置的安装路径就是后续 GOROOT 的值。

在这里插入图片描述

在这里插入图片描述

然后点击 Install,等待安装完成。

在这里插入图片描述

在这里插入图片描述

最后点击 Finish。

在这里插入图片描述

2.GOROOT

GOROOT 就是 Go 语言的安装目录,在绝大多数情况下都不需要修改 GOROOT。

以我的电脑为例,GOROOT 的值为 D:\software\golang

Go 的文件目录结构如下:

在这里插入图片描述

在安装 Go1.20.3 的时候,默认会自动把 GOROOT 下的 bin 目录添加到系统环境变量 PATH 中。

以我的电脑为例,已经自动把 D:\software\golang\bin 添加到系统环境变量 PATH 中了。

在这里插入图片描述

因此,win + R 输入 cmd 打开命令行,在任意位置下输入 go version 都能执行成功。

在这里插入图片描述

在命令行中输入 go env 来查看所有 Go 环境变量的当前值:

在这里插入图片描述

3.Go 的包管理

参考文章:

  • 一文搞懂 Go Modules 前世今生及入门使用
  • 简单聊聊 GOPATH 与 Go Modules
  • go包管理速通,一篇文章就够了,再也不用担心因为不会导包被辞退
  • 10分钟带你了解Go依赖管理常见模式(一)

3.1 GOPATH 模式

在 GOPATH 模式下,要求将所有工程代码放在 GOPATH/src 目录下。在工程经过 go build xxx、go install xxx 或 go get xxx 等指令后,会将拉取的第三方 xxx 依赖包放在 GOPATH/src 目录下,产生的二进制可执行文件放在 GOPATH/bin 目录下,生成的中间缓存文件会被保存在 GOPATH/pkg 目录下。

GOPATH 模式下没有版本控制的概念,在执行 go get 的时候,获取的永远是最新的依赖包,并下载到 GOPATH/src 目录下,如果你有两个工程依赖一个包的 v1 和 v2 版本,则会发生冲突,因为 GOPATH 模式下两个工程内依赖的导入路径都是一样的,因此两个工程获取的都是 v2 版本。

GOPATH 模式已经不推荐使用了,任何 Gopher 应该从此刻就投入 Go Modules 的怀抱。

3.2 Go Modules 模式

Go Modules 发布于 Go1.11,成长于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在生产上使用。

在 Go Modules 模式下,所有依赖的包存放在 GOPATH/pkg/mod 目录下,所有第三方二进制可执行文件放在 GOPATH/bin 目录下,且工程项目可以放在 GOPATH/src 路径之外,但要求项目中需要有 go.mod 文件(该文件可以通过 go mod init 命令初始化得到)。

在有了 Go Modules 之后,GOPATH 和 Go Modules 就分别负责不同的职责,共同为 Golang 项目服务:

  • GOPATH 用来存放我们从网上拉取的第三方依赖包。
  • Go Modules 用来存放我们自己的 Golang 项目文件,当自己的项目需要依赖第三方的包的时候,我们通过 Go Modules 目录下的一个 go.mod 文件来引用 GOPATH/pkg/mod 文件夹下的第三方依赖即可。

这样一来,既解决了原来只能局限在 GOPATH/src 下进行编程的问题,也解决了第三方依赖包难以管理和重复依赖占用磁盘空间的问题。总而言之,在引入 Go Modules 之后,我们不会直接在 GOPATH 目录下进行编程,而是把 GOPATH 作为一个第三方依赖包的仓库,我们真正的工作空间在 Go Modules 目录下。

4.GOPATH

至此,

GOPATH 就是之后项目下载依赖包的存放路径。Go 语言目前都是使用 Go Modules 管理依赖,在使用 Go Modules 时,Go 会把下载的依赖包存储在 GOPATH\pkg\mod 中。

其实,在安装 Go1.20.3 时已经自动配置好 GOPATH 了,但是默认情况下 GOPATH 在 C 盘,所以,之后下载的外部依赖包也就存放在 C 盘。如果怕之后安装的依赖包太多占用 C 盘空间的话,我们可以更改 GOPATH 到其他位置。

在这里插入图片描述

将 GOPATH 变量的值 %USERPROFILE%\go 修改为自己想要的目录。

在这里插入图片描述

然后再把用户环境变量 PATH 中的值 %USERPROFILE%\go\bin 修改为 GOPATH 下的 bin 目录。

在这里插入图片描述

在这里插入图片描述

5.GO111MODULE

GO111MODULE 是 Go Modules 功能的开关,GO111MODULE 有三个值:

  • GO111MODULE=off,go 命令行将不会支持 modules 功能,寻找依赖包的方式将会沿用旧版本的通过 vendor 目录或者 GOPATH 模式来查找。
  • GO111MODULE=on,go 命令行会使用 modules 功能,而一点也不会去 GOPATH 目录下查找。
  • GO111MODULE=auto,go 命令行将会根据当前目录来决定是否启用 modules 功能。下面两种情形将启用 modules 功能:
    • 当前目录在 GOPATH\src 之外且该目录包含 go.mod 文件。
    • 当前文件在包含 go.mod 文件的目录下面。

开启 Go Modules 功能的命令如下:

go env -w GO111MODULE=on

6.GOPROXY

GOPROXY 主要用于设置 Go 模块代理,其作用是使 Go 在后续拉取模块版本时直接通过镜像站点来快速拉取。

GOPROXY 的值是一个以英文逗号 , 分割的 Go 模块代理列表,允许设置多个模块代理。假设你不想使用,也可以将其设置为 off,这将会禁止 Go 在后续操作中使用任何 Go 模块代理。

GOPROXY 的默认值是 https://proxy.golang.org,direct,在国内无法访问。

因此,这里推荐使用七牛云的代理:https://goproxy.cn/

设置七牛云代理的命令如下:

go env -w GOPROXY=https://goproxy.cn,direct

在上面设置的值中,我们可以发现值列表中有 “direct” 标识,它又有什么作用呢?

实际上 “direct” 是一个特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取(比如 GitHub 等),场景如下:当值列表中上一个 Go 模块代理返回 404 或 410 错误时,Go 自动尝试列表中的下一个,遇见 “direct” 时回源,也就是回到源地址去抓取,而遇见 EOF 时终止并抛出类似 “invalid version: unknown revision…” 的错误。

7.GOSUMDB

GOSUMDB 的值是一个 Go checksum database,用于在拉取模块版本时(无论是从源站拉取还是通过 Go module proxy 拉取)保证拉取到的模块版本数据未经过篡改,若发现不一致,也就是可能存在篡改,将会立即中止。

GOSUMDB 的默认值为 sum.golang.org,在国内无法访问,但是 GOSUMDB 可以被 Go 模块代理所代理。因此,我们可以通过设置 GOPROXY 来解决,而先前我们所设置的模块代理 https://goproxy.cn 就能支持代理 sum.golang.org,所以这一个问题在设置 GOPROXY 后,你可以不需要过度关心。

也可以将 GOSUMDB 设置为 off,也就是禁止 Go 在后续操作中校验模块版本。

8.GONOPROXY/GONOSUMDB/GOPRIVATE

这三个环境变量都是用在当前项目依赖了私有模块,例如像是你公司的私有 Git 仓库,又或是 Github 中的私有库,都是属于私有模块,都是要进行设置的,否则会拉取失败。

更细致来讲,就是依赖了由 GOPROXY 指定的 Go 模块代理或由 GOSUMDB 指定 Go checksum database 都无法访问到的模块时的场景。

而一般建议直接设置 GOPRIVATE,它的值将作为 GONOPROXY 和 GONOSUMDB 的默认值,所以建议的最佳姿势是直接使用 GOPRIVATE。

并且它们的值都是一个以英文逗号 , 分割的模块路径前缀,也就是可以设置多个,例如:

go env -w GOPRIVATE="git.example.com,github.com/eddycjy/mquote"

设置后,前缀为 git.example.com 和 github.com/eddycjy/mquote 的模块都会被认为是私有模块。

如果不想每次都重新设置,我们也可以利用通配符,例如:

go env -w GOPRIVATE="*.example.com"

这样设置的话,所有模块路径为 example.com 的子域名(例如:git.example.com)都将不经过 Go module proxy 和 Go checksum database,需要注意的是不包括 example.com 本身。

9.GOMODCACHE

GOMODCACHE 就是存储 Go 下载的外部依赖模块文件的目录,默认值为 GOPATH\pkg\mod

以我的电脑为例,GOMODCACHE 的值为 D:\software\gopath\pkg\mod

因此,我们只需要更改 GOPATH 的值即可,GOMODCACHE 的值会自动做出相应的变动。

10.GOCACHE

GOCACHE 目录用来存放 Go 项目在构建过程中产生的缓存,默认值为 C:\Users\%UserName%\AppData\Local\go-build

以我的电脑为例,GOCACHE 的值为 C:\Users\Cai\AppData\Local\go-build

11.GOENV

GOENV 目录用来存放 Go 环境变量的值的配置文件,默认值为 C:\Users\%UserName%\AppData\Roaming\go\env,此值一般不需要更改,并且也不能通过 go env 的方式来更改此变量值。

以我的电脑为例,GOENV 的值为 C:\Users\Cai\AppData\Roaming\go\env

我们可以来到此目录下,发现有一个 env 文件,打开就可以看到:文件的内容就是我们之前自定义过的 Go 环境变量的值。

在这里插入图片描述

12.GOBIN

GOBIN 目录用来存放程序生成的可执行文件。可以设置它,也可以不设置,默认为空,保持默认即可。

在使用 Go Modules 时,Go 会把 go install 的可执行文件结果放在 GOPATH\bin 中。在前面的步骤中,我们已经把 GOPATH\bin 这个目录添加到用户环境变量 PATH 中了,这样在全局任何地方都能找到这个目录。

13.参考资料

Go env环境变量配置

GO111MODULE的设置与查看

Go — build、run 和 install 命令

亲测GO环境搭建,理解go build、go install、go get

go run、build、install、get的原理和区别

go mod使用

简单聊聊 GOPATH 与 Go Modules

GoModules模式基础环境说明

Go 语言中 GoPath 模式与 GoModules 模式介绍

go env环境变量详解(一)

go env环境变量详解(二)

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

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

相关文章

Vue3带来了什么

目录性能方面的优化更好的TypeScript集成用于处理大规模用例的新API分层内部模块CompositionAPI更多RFC提供的两个新功能proxy代替defineProperty双向绑定性能方面的优化 首先是相对Vue2的一些性能改进: 通过摇树(减轻了多达41%的资源大小)初始渲染&am…

Hadoop安装Hbase启动失败报错解决方法

先进入hbase文件目录里看日志文件看看报什么错再具体解决: vim /opt/module/hbase-1.3.3/logs/hbase-root-master-hadoop-single.log 1.报错org.apache.hadoop.security.AccessControlException: Permission denied: user异常解决方法 1、第一种 在hdfs的配置文件…

3.2 二维随机变量的边缘分布

思维导图: 学习目标: 要学习二维随机变量的边缘分布,我可能会按照以下步骤进行学习: 理解二维随机变量的概念和表示方法,包括联合分布函数和联合分布律等概念。理解二维随机变量的边缘分布的概念和意义,即…

2023年4月份北京/广州/深圳DAMA-CDGP数据治理专家证书收益

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

Mysql的学习与巩固:一条SQL查询语句是如何执行的?

前提 我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单…

【华为机试真题详解JAVA实现】—MP3光标位置

目录 一、题目描述 二、解题代码 一、题目描述 MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。 现在要实现通过上下键控制光标移动来浏览歌曲列…

[2022 SP] Copy, Right? 深度学习模型版权保护的测试框架

Copy, Right? A Testing Framework for Copyright Protection of Deep Learning Models | IEEE Conference Publication | IEEE Xplore 摘要 深度学习模型,尤其是那些大规模和高性能的模型,训练成本可能非常高,需要大量的数据和计算资源。…

DDS介绍

今天我们一起来了解一个中间件协议框架DDS,它的全称是Data Distribution Service,是一套通信协议和API标准,提供了以数据为中心的连接服务,基于发布者-订阅者模型,提供了介于操作系统和应用程序之间的功能,…

【数据结构】二叉树性质巩固

🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…

Shell基础了解

一.Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken…

JavaScript【二】JavaScript中的流程控制

文章目录🌟前言🌟流程控制🌟选择结构(条件判断)🌟if分支🌟 switch 分支(多选一的条件判断)🌟循环结构🌟for🌟while🌟 do...while🌟区别🌟break和c…

从元宇宙婚礼和元宇宙游戏看元宇宙的“史前时代”

元宇宙,正在从科幻走进现实——确切地说,是走进现实中的虚拟世界。这一切,离不开强有力的高科技及其产品化基础设施设备的支撑。而且,元宇宙不会单由哪一家公司建成,也不会一蹴而就,它需要多方参与和一定的…

外包干了三年,算是废了...

先说一下自己的情况。大专生,19年通过校招进入湖南某软件公司,干了接近3年的测试,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年&#xff0c…

C语言基础——数组与字符串

文章目录一、数组1.数组的意义2.数组类型如何表示3.数组变量的定义3.1求数组类型大小3.2数组的长度4.数组中成员的使用4.1数组的下标4.2如何表示数组成员5.常见问题6.冒泡排序7.字符数组 字符类型数组7.1定义7.2物联网 -- 服务器/web -- 上层使用大多是字符串。7.3定义1个字符型…

javaweb考研辅导网站交流

设计内容: 前台技术:html/css/javascript。 后台技术:java/jspServlet/struts2框架。 数据库技术:mysql。 具体功能模块主要包括: 1、考研浅谈:专业不同的热心的考研成功者能够发布不同科目的复习心得等。…

JavaScript 基础入门速成下篇

JavaScript 高级 数组及操作方法 数组,即一组数据的集合,JavaScript中,数组里面的数据可以时不同类型的; 定义数组的方法 1. 对象实例创建 new Array 2. 直接量创建 // 对象实例创建 var arr new Array(1,2,3)// 直接量…

4.11每日一题

翀某说:C语言快忘了,决定每日一练,周末超难度训练 当然了翀某说,python自学中,所以每道题除了C语言之外,看看python能不能写 题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组…

入门前端框架Layui

🏭 作者:哈桑c(CSDN平台) ⛺️ 专栏:前端自学记录 文章目录文章简介说在前面的话需要具备的基础1、Layui 的介绍2、Layui 的下载和使用3、Layui 示例4、Layuimini layui-vue结语文章简介 本文为大家介绍前端 UI 组件…

【Linux】进程概念二

文章目录进程概念二1. 进程状态2. 进程状态查看3. 僵尸进程3.1 僵尸进程的危害4. 孤儿进程5. 环境变量5.1 常见环境变量5.2 查看环境变量的方法5.3 测试PATH5.4 环境变量相关的命令5.5 环境变量的组织方式5.6 通过代码获取环境变量6. 程序地址空间7. 进程地址空间8. 扩展8.1 为…

前端学习路线(2023版)超详细

一:前端开发基本功 俗话说的好“不积跬步,无以至千里”,学习也是一样的从简单的基础的知识点开始慢慢积累,首先就是掌握前端语言的基础知识3大部分(HTML、CSS、页面制作工具)其中包含了元素和属性、表单和图…