首页 > 其他分享 >Go环境变量配置,及GOROOT、GOPATH的区别

Go环境变量配置,及GOROOT、GOPATH的区别

时间:2024-03-20 17:32:33浏览次数:27  
标签:GOPATH GO111MODULE GOROOT Go go 目录

一、安装Go

go下载地址:

https://golang.google.cn/dl/

windows下载安装,有两种方式。解压和直接安装

方式一:直接下载安装包。以.msi结尾的文件。例如:

go1.22.1.windows-amd64.msi 

下载后,双击后一直点下一步即可安装成功。

方式二:下载压缩包文件,直接解压。解压后配置环境变量即可。例如:

下载完成,放到自己电脑的目录里面,然后解压,加压后得到如下文件:

二、配置Go环境变量

右击电脑 -> 属性  -> 高级系统设置  -> 环境变量。打开环境变量设置窗口

增加:增加两个环境变量:GOROOT、GOPATH

GOROOT:GO的安装目录,相当于java中的jdk

GOPATH:GO的项目工作目录,以后开发的代码就写到这个文件夹中。

配置GOROOT:

GOPATH和GOROOT的配置略有不同,我建议配置两个GOPATH目录,第一个用于放 Go 语言的第三方包,第二个用于放自己的开发代码。我们来新建GOPATH。点击系统变量下的新建,在变量名一栏输入GOPATH,在变量值一栏输入任意两个目录,中间用英文分号隔开。

配置GOPATH 

然后将新建的GOROOT配置到 Path 这个环境变量中去,在系统变量中找到 Path,点击编辑->新建,输入%GOROOT%\bin,点击确定。并将所有母窗口的确定全部点下,确保环境变量生效。

 

 

 

这样就配置完了,一路点击确定,直到桌面; 

检查是否配置成功。 

windows+R 输入 cmd 打开终端,输入go version,如果输出如下图所示,则安装成功。

#查看Go版本
go version

#查看Go环境变量
go env

 

 

配置GO111MODULE、GOPROXY、GOSUMDB

GO111MODULE:为啥是111呢,这是冲go的1.11版本增加的一个功能。用于管理第三方包的,如果这个开启的话,gopath这个变量基本上就用不到了。

Go默认的GOPROXY的值是:GOPROXY=https://proxy.golang.org,direct。这个goproxy在使用go get安装第三方库的时候会报错,导致无法下载成功,所以必须要修改一下。

比如改为:https://goproxy.io,direct (七牛镜像)

或 https://mirrors.aliyun.com/goproxy(阿里云镜像)

配置go变量的一些命令: 

#开启mod模式(项目管理需要用到)
go env -w GO111MODULE=on
#重新设置成七牛镜像源(推荐)或阿里镜像源(用原有的会比较慢)
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy

#关闭包的MD5校验
go env -w GOSUMDB=off

#查看环境变量
go env

 

 

三、GoRoot

GOROOT是go的安装路径。GOROOT目录下有bin、doc、src等。如下图:

四、GoPath

GOPATH:是开发的工作目录。用于保存编译后的二进制文件。go get命令和go install命令会下载go的代码到GOPATH中。

使用GOPATH时,项目中import引用的第三方包,首先会从GOROOT/src下搜索,如果搜索不到,会到GOPATH/src目录下搜索。

举个例子吧:

比如go项目中,应用了如下第三方包:

import "Go-Player/src/chapter17/models"


第一步:Go会先去GOROOT/src目录中查找,很显然它不是标准库的包,没找到。
第二步:继续在GOPATH/src目录去找,准确说是GOPATH/src/Go-Player/src/chapter17/models这个目录。

如果该目录不存在,会报错找不到package。

在使用GOPATH管理项目时,需要按照GO寻找package的规范来合理地保存和组织Go代码。

五、go-mod

开启GO111MODULE时,即GO111MODULE=on,再项目中引用第三方包时,仍然使用GOPATH的方式进行引用,这时在引用时会报错。

GO111MODULE 有三个值:off, on和auto(默认值)。

GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。


GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。


GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。

这种情况下可以分为两种情形:
当前目录在GOPATH/src之外且该目录包含go.mod文件,即使用go mod对项目的第三方依赖进行管理,不再使用gopath的方式
当前文件在包含go.mod文件的目录下面。

当modules 功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module。 

标签:GOPATH,GO111MODULE,GOROOT,Go,go,目录
From: https://blog.csdn.net/h_and_g/article/details/136878599

相关文章

  • Web框架开发-Django-模板继承和静态文件配置
    一、模板继承目的:减少代码的冗余语法:123{%blockclassinfo%}{%endblock%}具体步骤:1、创建一个base.html文件2、把要显示的页面的内容写在这里面,也就是HTML要在浏览器显示的内容3、在rigth里面写一个盒子{%blockclassinfo%}{%endblock%}......
  • Web框架开发-Django-数据库表的单表查询
    一、添加表记录对于单表有两种方式方式一:12book_obj=models.Book(title="python全栈开发",price=100,publishData="2015-08-08",author='张三',publish='机械工业出版社')    book_obj.save()方式二:12#方式二:    models.Book.objec......
  • golang 运行时死锁排查和检测
    当运行的系统发生goroutine等待获取锁时间超过预期时,判定为发生了死锁。因目前代码中使用了一些公开的锁实例,调用链也比较长,对问题排查带来了很大困扰。为了便于问题排查,需要借助工具来实现。1.发生死锁的判定依据和原因1.1判定依据如下为使用Mutex锁产生的锁等待,并持续了2......
  • Go语言GOPATH是什么
    在Go语言中,GOPATH是一个环境变量,用于指定Go语言的工作空间路径。它是Go语言中一个重要的概念,用于管理和组织你的Go项目。GOPATH指定了Go语言的工作目录,它包含了三个重要的子目录:src、pkg和bin。这些子目录分别用于存放源代码文件、编译后的包文件和可执行文件。当你使用go......
  • golang实现数据分组
    背景:从数据库里查出了532条数据,这532条数据需要通过一个接口过滤符合条件的,由于过滤比较流程长,过滤接口避免超时,只允许一次请求100条,于是我们就需要针对这个532条数据进行分组。思路:就是把这个数据分成6组,前5组是100条,第6组是32条。max=532/100取整,532%100不等于零max+1,创建一个......
  • 掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
    通道(Channel)是用来在Go程序中传递数据的一种数据结构。它是一种类型安全的、并发安全的、阻塞式的数据传输方式,用于在不同的Go协程之间传递消息。基本概念创建通道:使用make()函数创建一个通道。ch:=make(chanint)//创建一个整型通道发送数据:使用<-操作符向通......
  • mongo GridFSBucket
    1、描述:mongo  单机使用 GridFSBucket2、pox中添加jar<dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.12.9</version></dependency>3、module中使用,直接上代码 3.1......
  • 2024年是否是人形机器人的元年 —— 继OpenAI/Google/特斯拉之后黄仁勋也宣布NVIDIA公
    相关:https://www.youtube.com/watch?v=bMIRhOXAjYk......
  • Go语言实现时间滑动窗口算法 动态计算增加量、最大值、最小值
    //时间窗口varfiveMinAccMap=NewAccumulatorsMap(5*time.Minute)vartenMinAccMap=NewAccumulatorsMap(10*time.Minute)varfifteenMinAccMap=NewAccumulatorsMap(15*time.Minute)varthirtyMinAccMap=NewAccumulatorsMap(30*time.Minute)varoneHourAccM......
  • 2024-03-20:用go语言,自 01背包问世之后,小 A 对此深感兴趣。 一天,小 A 去远游,却发现他的
    2024-03-20:用go语言,自01背包问世之后,小A对此深感兴趣。一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组。每组中的物品只能选择1件,现在他想知道最大的利用价值是多少?答案2024-03-20:来自左程云。灵捷3.5大体步骤如下:1.定义常量MAXN和MAXM,分别表......