- 前言
- 搭建Go环境
- Goland下载
- Golong的SDK下载
- 环境变量配置
- 搭建GO mod环境
- 初始化Go mod项目
- GOROOT、GOPATH、GOPROXY之间关系
- GOROOT介绍
- GOPATH介绍
- Go Modules的诞生
- GOPROXY介绍
- 本人环境是windows10+Goland2020.3.4+Go版本是1.17.3
- 大家如果只是单纯学习Go语言,只需要搭建Go环境就可以, 如果是想开发一个项目的话,目前主流公司都是使用Go mod的形式, 如果你学过java的话,这个Go mod和java的maven如出一辙,甚至比maven还要简单
- PS:如果要搭建Go mod环境,必须必须Go的版本是在14以上!!!
- 直接去官网下载即可 https://www.jetbrains.com/go/
- 安装路径建议不要动, 以防后续有其他环境路径问题
- 直接通过Goland下载即可
- PS:一定要记着Location目录地址
- https://goproxy.cn七牛云为开发者提供免费、可靠的、持续在线的且经过CDN加速的代理。后续使用go mod的时候速度较友好.
- GOPATH随便一个目录就好,后续会存储下载好的依赖文件
- GOROOT是你下载go版本的目录地址,这个一定不能错
- 这里确认好之后,就可以才cmd里看到你的go环境go env
- 此时你的GO环境就搭建好了, 新建项目就可以学习GO语言了
- 搭建这个环境在系统一定要配之前的GOPROXY
- 新建项目
- 防止Goland坑人,注意以下几点配置
- 最好在cmd里执行以下这个命令set GO111MODULE=on
GO111MODULE=off,无模块支持,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,模块支持,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
(1)当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。
(2)当前文件在包含go.mod文件的目录下面。
- 注意:wind的GOPROXY默认是https://proxy.golang.org,direct
这个goproxy在使用go get安装第三方库的时候回报错,导致无法下载成功
所以一定要改成https://goproxy.io/
- 使用命令:go mod init [项目目录名]
- 写一个测试文件
package main import "github.com/gin-gonic/gin" // 保存文件即可, 此时 "github.com/gin-gonic/gin" 提示红色(表示这个依赖不存在)
- 使用 go mod tidy 整理依赖
- 使用go build自动下载依赖
如果出现这个问题:cannot find module providing package github.com/gin-gonic/gin: 安装gin后找不到gin包
解决办法: 在使用 GOPROXY 的时候,开启了 GO111MODULE,导致包管理非官方所说的在 $GOPATHsrc,而是去了 $GOPATHsrcpkg目录下,此时就需要用go mod引入这些包
也就是运行以下两条命令
go mod init gin go mod edit -require github.com/gin-gonic/gin@latest
- 查看项目依赖的包go list -m all
至此go mod项目也搭建好了
在安装完Golang语言的时候,所谓的安装路径其实就是你的GOROOT路径,也就是说GOROOT存放的Golang语言内建的程式库的所在位置,而通常你安装完后,你电脑的环境变数就会设好GOROOT路径,当你开发Golang程式的时候,当你import内建的程式库的时候,并不需要额外安装,而当程式运行后,预设也会先去GOROOT路径下寻找相对应的程式库来运行。
GOPATH介绍package main
import "github.com/gin-gonic/gin"
// 保存文件即可, 此时 "github.com/gin-gonic/gin" 提示红色(表示这个依赖不存在)
func main() {
key := gin.BindKey
}
当我们import了一个github.com/gin-gonic/gin套件,这个是别人开发的套件,是不存在于官方程式库的,而是放在GitHub上的第三方套件。
此时执行Golang程式码,当需要存取套件时,会先去GOROOT路径下的src资料夹找同等于我们在程式码中import的路径下去找有没有gin这个资料夹,而这资料夹里面就是包含了所有有关于该套件的程式库。
如果在GOROOT路径下没有找到,则会往GOPATH路径下的src资料夹找同等于我们在程式码中import的路径下去找有没有gin这个资料夹。
所以只要GOROOT跟GOPATH路径下都没有找到该套件的话,就无法执行该程式码。
根据上面GOROOT的介绍,我们可以知道官方的程式库所在位置就是在GOROOT里面,而GOPATH就是专门存放第三方套件以供我们程式码的需要。那通常开发Golang的话,通常会在重新设定GOPATH的位置。
第三方套件只要不是官方程式库,都需要放置在GOPATH/src的路径下才可以使用。
Go Modules的诞生为了解决不被GOPATH的问题,因此官方在1.11开始推出了Go Modules的功能。Go Modules解决方式很像是Java看到Maven的做法,将第三方程式库储存在本地的空间,并且给程式去引用。
- 设定GO111MODULE环境变数~前面有说到过其具体用途
- 我是建议要开发Go mod就不再使用GOPATH的功能了,而是采用Go Modules的做法,因此建议都设定为on。而采用Go Modules,下载下来的第三方套件都在哪呢?其实就位在GOPATH/pkg/mod资料夹里面。
- 在GOPATH/pkg/mod资料夹里面。而且会发现出现一个go.sum的档案,这个档案基本上用来记录套件版本的关系,确保是正确的,是不太需要理会的。
GOPROXY介绍官方说明:除了go.mod之外,go命令还维护一个名为go.sum的文件,其中包含特定模块版本内容的预期加密哈希
go命令使用go.sum文件确保这些模块的未来下载检索与第一次下载相同的位,以确保项目所依赖的模块不会出现意外更改,无论是出于恶意、意外还是其他原因。 go.mod和go.sum都应检入版本控制。
go.sum 不需要手工维护,所以可以不用太关注。
- 这个具体的公司会有不同的代理,具体配置方案和前面一样, 一般学习使用我推荐的那个就够
- proxy配置的不同就是在下载这个依赖的时候的代理方不同



