另一方面,GOROOT在安装Golang语言时,安装路径其实就是你的GOROOT路径,也就是GOROOT存储的Golang语言内置的库的位置,通常你安装后,你的电脑
1、Glang查看环境变量go env
一些env是我修改的。 通常,如果是首次安装Golang语言且未设置环境变量,则GOROOT设置路径是安装Golang语言的路径,GOPATH通常是用户目录下的go文件夹。
2、使用go run运行文件打包管理(fmt ) (func main ) (fmt.println ),然后运行以下命令:
go run main.go正常输出hello world。 go run实际上编译代码并生成可执行文件。 编译文件和可执行文件实际上位于临时文件夹中,运行完成后将自动删除。 此命令可以像直译一样执行,而无需设置其他首选项。
3、第三方工具包packagemainimport (github.com/gin-gonic/gin ) (func main ) { router :=gin.default } (router.run )
运行Golang代码时,如果需要访问软件包,请首先前往GOROOT路径下的src文件夹,查找代码中与import相同的路径中是否有名为gin的文件夹。 此文件夹包含有关包的所有库。 如果在GOROOT路径中找不到,请在GOPATH路径下的src文件夹中查找代码中的导入等效路径,以查找是否有名为gin的文件夹。 因此,除非在GOROOT和GOPATH路径中都找到软件包,否则无法执行代码。
二、GOPATH介绍根据上述GOROOT介绍,可以看到官方的库位于GOROOT中,GOPATH为了我们代码的需要存储了第三方软件包。 它通常在开发谷歌时,通常会重新设置GOPATH的位置。
1、GOPATH目录binpkgsrc按照Golang语言的惯例(强制),GOPATH是指src路径的上层,在GOPATH路径的下方主动添加src文件夹。 src是source code的意思,即包含开发Golang代码的相关项目的源代码。
2、GOPATH的缺点第三方软件包必须放在GOPATH/src的路径上才能使用,除非是官方库。
go get最常用于我们使用别人想向GitHub公开的工具包,从互联网上的clone到GOPATH/src。 虽然这很有用,但GOPATH/src下的代码会很复杂。 除了自己开发的项目文件夹外,还包含其他三方程库的项目文件夹。
另外,如果开发的项目采用第三方软件包,该怎么办? 传统的解决方法是设置多个不同的GOPATH。 社区可能会开发相应的package manager (如Vendor和Dep )来解决此问题,但不是由官方主导的。
三、Go Modules的诞生为了解决GOPATH不被发送的问题,从1.11开始正式推出了Go Modules的功能。 Go Modules解决方案就像Java看到Maven的做法,将第三方程库存储在本地空间中并引用到程序中一样。
1、设定GO111MODULE环境变量后,共计可以有3种不同的值。
自动
缺省情况下,go命令根据当前目录确定是否启用modules功能。 必须满足以下两种情况:
项目目录不在GOPATH/src/下
或上一层目录中存在go.mod文件on
go命令使用modules,不在GOPATH目录下搜索。 关闭
go命令不支持模块功能。 像以前的GOPATH做法一样寻找工具包。 我建议开发Go项目不要使用GOPATH的功能,而采用Go Modules的做法,因此建议全部设置为on。
使用Go Modules下载的第三方工具包在哪里? 实际上位于GOPATH/pkg/mod文件夹中。
2、初始化modgomodinitmodulenamemodulename可以填写也可以不填写。 如果不填写的话,默认采用项目文件夹的名称。
您可以在此文件中写以下关键字:
模组
模块路径go的定义
定义go语言版本请求
指定从属软件包。 默认值为最新版本,可以指定版本号exclude
排除此套件及其版本的替换
使用不同的软件包版本,替换原始软件包版本的注释
// 单行注解/* 多行注解*/
indirect 代表被间接导入的依赖包
假设现在我要引入GitHub上的gin-gonic/gin的套件,如下定义:
module awesomeProjectgo 1.13require github.com/gin-gonic/gin v1.6.3再执行以下指令:
go mod download会将需要的套件安装在GOPATH/pkg/mod资料夹里面。而且会发现出现一个go.sum的档案,这个档案基本上用来记录套件版本的关系,确保是正确的,是不太需要理会的。
官方说明:除了go.mod之外,go命令还维护一个名为go.sum的文件,其中包含特定模块版本内容的预期加密哈希
go命令使用go.sum文件确保这些模块的未来下载检索与第一次下载相同的位,以确保项目所依赖的模块不会出现意外更改,无论是出于恶意、意外还是其他原因。 go.mod和go.sum都应检入版本控制。
go.sum 不需要手工维护,所以可以不用太关注。
如果将gin版本改成v1.4.0再重新执行go mod download,就会发现在GOPATH/pkg/mod里面gin-gonic会有两个资料夹分别是gin@v1.4.0、gin@v1.5.0,借此来区分版本。
当然其实也可以不执行go mod download,而直接运行go build or go install 也会自动将套件安装在相对应的地方。
还有一种方式直接下载套件而不用在go.mod中定义:
go get github.com/gin-gonic/gin@v1.5.0只要有开启go modules功能,go get 就不会像以前一样在GOPATH/src下放置套件档案,而是会放在GOPATH/pkg/mod里面,并且go.mod会写好引入,这样也就不用使用go mod download指令了。