小编给大家分享一下GoPath模式和GoMoudle模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
去模组的前世今生
前世-gopath
GoPath是什么
GoPath是什么,相信已经不用我再多说什么了。大家深受摧残多年,应该已经有所体会。在v.1.11版本之前,安装去肯定要在环境变量中配置<代码> GoPath> 代码,我们可以简单的将其理解成是工作目录。目录结构如下
——本存放编译后生成的二进制可执行文件
——包裹存放编译后生成的<代码>。代码>文件
——src存放项目的源代码,可以是你自己写的代码,也可以是你去下载的包
将你的包或者别人的包全部放在<代码> GOPATH美元/src/<代码>目录下进行管理的方式,我们称之为GOPATH模式。
GOPATH有什么样的问题?
版本管理问题
GOPATH根本没有版本的概念,如果你所应用的库需要升级,那就是全局升级,所以涉及这个库的服务在下一次编译中都会使用新的库,这是一件很危险的事情。版本管理非常重要,自己应该管理好自己的引用库。
协同开发问题
当其他的开发者得到到源码进行修改的时候,你无法保证他下载的包是不是你所期望的版本,这及有可能导致服务出错,且很难查找原因。
今生-GoMoudle
去模块在v1.11版本正式推出,在发布的v1.14版本中,官方正式发话,称其已经足够成熟,可以应用于生产上。
从v1.11开始,<代码>去env> 代码多了个环境变量:<代码> GO111MODULE> 代码,这里的111年,其实就是v1.11的象征标志,去里好像很喜欢这样的命名方式,比如当初供应商出现的时候,也多了个<代码> GO15VENDOREXPERIMENT 代码>环境变量,其中,表示的供应商是在v1.5时才诞生的。
<代码> GO111MODULE> 代码是一个开关,通过它可以开启或关闭去国防部模式。
它有三个可选值:<代码> 代码>,<代码> 代码>,<代码>汽车> 代码,默认值是汽车代码> <代码>。
- <李>
<代码> GO111MODULE=代码>禁了用模块支持,编译时会从<代码> GOPATH 代码>和<代码>供应商代码>文件夹中查找包。
李> <李><代码> GO111MODULE=> 代码上启用模块支持,编译时会忽略<代码> GOPATH 代码>和<代码>供应商代码>文件夹,只根据<代码> go.mod> 代码下载依赖。
李> <李><代码> GO111MODULE=汽车> 代码,当项目在<代码> GOPATH美元/src/<代码>外且项目根目录有<代码>。国防部代码>文件时,自动开启模块支持。
李>去国防部出现后,GOPATH(肯定没人使用了)和GOVENDOR将会且正在被逐步淘汰,但是若你的项目仍然要使用那些即将过时的包依赖管理方案,请注意将GO111MODULE置为。
具体怎么设置呢?可以使用去env的命令,如我要开启模,就使用这条命令
go env -w GO111MODULE=爸?
去国防部使用
去国防部不再依靠GOPATH美元,使得它可以脱离GOPATH来创建项目
你可以在你电脑的任意位置创建一个文件夹go_demo
使用去国防部命令初始化,此时目录下只有2个文件,走了。国防部是执行命令后生成的文件。
go mod init go_demo
文件<代码>主要。代码>解释:引入一个现在的时间处理库,输出时间
package 主要 import ( “fmt" “;github.com/jinzhu/now" ) func main (), { fmt.Println (“hello world",, now.BeginningOfDay ()) }
。国防部内容
module go_demo 1.15 go require github.com/jinzhu/now v1.1.1
内容解释:
- <李>
第一行:模块的引用路径
李> <李>第二行:项目使用的版去本
李> <李>第三行:项目所需的直接依赖包及其版本
李>此时我们在命令行执行<代码>去构建代码>进行编译,发现多了一个。总和文件,那么这个文件又是什么?
。总和文件相比走。国防部就比较复杂了。虽然内容多,但是也不难理解。