云过天更蓝 發表於 2019-10-31 17:43:00

go mod 生成 vendor

<p>go mod可以使项目从GOPATH的强制依赖中独立出来,也就是说你的项目依赖不再需要放在在GOPATH下面了,每个工程的依赖包、版本可由当前工程独立管理!</p>
<p>&nbsp;</p>
<ul>
<li>GO111MODULE</li>
<li>GO111MODULE有三个值:off,&nbsp;on和auto(默认值)。</li>
<li>GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。</li>
<li>GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。</li>
<li>GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:</li>
</ul>
<p>当前目录在GOPATH/src之外且该目录包含go.mod文件<br>当前文件在包含go.mod文件的目录下面。</p>
<p>mod操作记录</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">export GO111MODULE=on

go mod init github.com/mutex73/ga
</pre>
</div>
<p>&nbsp;</p>
<p><strong>go.mod如何在项目中使用?</strong><br>1.首先我们要在GOPATH/src 目录之外新建工程,或将老工程copy到GOPATH/src 目录之外。</p>
<p>PS:go.mod文件一旦创建后,它的内容将会被go toolchain全面掌控。go toolchain会在各类命令执行时,比如go get、go build、go mod等修改和维护go.mod文件。</p>
<p>go.mod 提供了module,&nbsp;require、replace和exclude四个命令</p>
<p>module语句指定包的名字(路径)<br>require语句指定的依赖项模块<br>replace语句可以替换依赖项模块<br>exclude语句可以忽略依赖项模块<br><br></p>
<p>  </p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">go mod init + 模块名称 初始化模块

即go mod init hello
</pre>
</div>
<p>  </p>
<p>运行完之后,会在当前目录下生成一个go.mod文件,这是一个关键文件,之后的包的管理都是通过这个文件管理。</p>
<p>官方说明:除了go.mod之外,go命令还维护一个名为go.sum的文件,其中包含特定模块版本内容的预期加密哈希&nbsp;<br>go命令使用go.sum文件确保这些模块的未来下载检索与第一次下载相同的位,以确保项目所依赖的模块不会出现意外更改,无论是出于恶意、意外还是其他原因。 go.mod和go.sum都应检入版本控制。&nbsp;<br>go.sum 不需要手工维护,所以可以不用太关注。</p>
<p>注意:子目录里是不需要init的,所有的子目录里的依赖都会组织在根目录的go.mod文件里</p>
<p>&nbsp;</p>
<p>export GO111MODULE=on</p>
<p><strong>1、go mod init newapp</strong></p>
<p>可以手动增加依赖go.uber.org/atomic v1.4.0或者让go自动发现和维护,下面build中会自动发现依赖包</p>
<p><strong>2、go build main.go</strong></p>
<p>vendor_test.go文件中增加了import "go.uber.org/zap"的语句,IDE提示报错,执行build后依赖包记录在go.mod中</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;"><span style="background-color: rgba(255, 255, 255, 1); font-family: &quot;PingFang SC&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px"> </span></pre>
<img style="background-color: rgba(255, 255, 255, 1); font-family: &quot;PingFang SC&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px" src="https://img2018.cnblogs.com/blog/646346/201910/646346-20191031173941882-1343921297.png" alt=""></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>3、go mod download</strong></p>
<p>依赖包会自动下载到$GOPATH/pkg/mod,多个项目可以共享缓存的mod</p>
<p><img src="https://img2018.cnblogs.com/blog/646346/201910/646346-20191031174230033-1329232612.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>4、go mod vendor</strong></p>
<p>从mod中拷贝到项目的vendor目录下,这样IDE就可以识别了!</p>
<p><img src="https://img2018.cnblogs.com/blog/646346/201910/646346-20191031174125183-555291300.png" alt=""></p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    拼搏在路上<br><br>
来源:https://www.cnblogs.com/akidongzi/p/11772701.html
頁: [1]
查看完整版本: go mod 生成 vendor