Golong~最新Windows下Go环境+Go mod搭建, 介绍GOROOT、GOPATH、GOPROXY之间关系

Golong~最新Windows下Go环境+Go mod搭建, 介绍GOROOT、GOPATH、GOPROXY之间关系,第1张

文章目录 前言搭建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以上!!! 搭建Go环境 Goland下载 直接去官网下载即可 https://www.jetbrains.com/go/安装路径建议不要动, 以防后续有其他环境路径问题 Golong的SDK下载 直接通过Goland下载即可

PS:一定要记着Location目录地址 环境变量配置


https://goproxy.cn七牛云为开发者提供免费、可靠的、持续在线的且经过CDN加速的代理。后续使用go mod的时候速度较友好.GOPATH随便一个目录就好,后续会存储下载好的依赖文件GOROOT是你下载go版本的目录地址,这个一定不能错这里确认好之后,就可以才cmd里看到你的go环境go env
此时你的GO环境就搭建好了, 新建项目就可以学习GO语言了 搭建GO mod环境 搭建这个环境在系统一定要配之前的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项目 使用命令: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,导致包管理非官方所说的在 $GOPATH\src\,而是去了 $GOPATH\src\pkg\目录下,此时就需要用go mod引入这些包
也就是运行以下两条命令

 go mod init gin
 
 go mod edit -require github.com/gin-gonic/gin@latest

查看项目依赖的包go list -m all
至此go mod项目也搭建好了 GOROOT、GOPATH、GOPROXY之间关系 GOROOT介绍

在安装完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的档案,这个档案基本上用来记录套件版本的关系,确保是正确的,是不太需要理会的。

官方说明:除了go.mod之外,go命令还维护一个名为go.sum的文件,其中包含特定模块版本内容的预期加密哈希
go命令使用go.sum文件确保这些模块的未来下载检索与第一次下载相同的位,以确保项目所依赖的模块不会出现意外更改,无论是出于恶意、意外还是其他原因。 go.mod和go.sum都应检入版本控制。
go.sum 不需要手工维护,所以可以不用太关注。

GOPROXY介绍 这个具体的公司会有不同的代理,具体配置方案和前面一样, 一般学习使用我推荐的那个就够proxy配置的不同就是在下载这个依赖的时候的代理方不同

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/995801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存