阿才哥 發表於 2021-4-30 11:31:00

go mod replace

<p>&nbsp;Introduction to Go Modules – Roberto Selbach https://roberto.selbach.dev/intro-to-go-modules/</p>
<p>go mod使用 - 简书 https://www.jianshu.com/p/760c97ff644c</p>
<p>&nbsp;</p>
<p>一个包管理工具应该有以下功能:<br>基本功能</p>
<ol>
<li>依赖管理</li>
<li>依赖包版本控制</li>
<li>对应的包管理平台</li>
<li>可以私有化部署</li>

</ol>
<p>加分:</p>
<ol start="5"><ol start="5">
<li>代码包是否可以复用</li>
<li>构建,测试,打包</li>
<li>发布上线</li>

</ol></ol>
<div>
<div>
<p>没有使用go mod之前的问题。</p>
<h3>使用go path问题</h3>
<ol>
<li>代码开发必须在go path src目录下,不然,就有问题。</li>
<li>依赖手动管理</li>
<li>依赖包没有版本可言</li>
</ol>
<p>从这个看, go path不算包管理工具</p>
<h3>govendor</h3>
<ol>
<li>解决了包依赖,一个配置文件就管理</li>
<li>依赖包全都下载到项目vendor下,每个项目都把有一份。拉取项目时,开始怀疑人生。</li>
</ol>
<h3>go mod介绍</h3>
<p>go modules 是 golang 1.11 新加的特性。现在1.12 已经发布了,是时候用起来了。Modules官方定义为:</p>
<blockquote>
<p>模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。</p>
</blockquote>
</div>
<div>
<div>
<p>go mod 有以下命令:</p>
<table>
<thead>
<tr><th>命令</th><th>说明</th></tr>
</thead>
<tbody>
<tr>
<td>download</td>
<td>download modules to local cache(下载依赖包)</td>
</tr>
<tr>
<td>edit</td>
<td>edit go.mod from tools or scripts(编辑go.mod)</td>
</tr>
<tr>
<td>graph</td>
<td>print module requirement graph (打印模块依赖图)</td>
</tr>
<tr>
<td>verify</td>
<td>initialize new module in current directory(在当前目录初始化mod)</td>
</tr>
<tr>
<td>tidy</td>
<td>add missing and remove unused modules(拉取缺少的模块,移除不用的模块)</td>
</tr>
<tr>
<td>vendor</td>
<td>make vendored copy of dependencies(将依赖复制到vendor下)</td>
</tr>
<tr>
<td>verify</td>
<td>verify dependencies have expected content (验证依赖是否正确)</td>
</tr>
<tr>
<td>why</td>
<td>explain why packages or modules are needed(解释为什么需要依赖)</td>
</tr>
</tbody>
</table>
<p>比较常用的是 <code>init</code>,<code>tidy</code>, <code>edit</code></p>
</div>
</div>
<div>
<div>
<h3>go get升级</h3>
<ul>
<li>运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)</li>
<li>运行 go get -u=patch 将会升级到最新的修订版本</li>
<li>运行 go get package@version 将会升级到指定的版本号version</li>
<li>运行go get如果有版本的更改,那么go.mod文件也会更改</li>
</ul>
<h3>使用replace替换无法直接获取的package</h3>
<p>由于某些已知的原因,并不是所有的package都能成功下载,比如:golang.org下的包。</p>
<p>modules 可以通过在 go.mod 文件中使用 replace 指令替换成github上对应的库,比如:</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-go"><code class="golanguage-go">replace <span class="token punctuation">(
    golang<span class="token punctuation">.org<span class="token operator">/x<span class="token operator">/crypto v0<span class="token punctuation">.<span class="token number">0.0<span class="token operator">-<span class="token number">20190313024323<span class="token operator">-a1f597ede03a <span class="token operator">=<span class="token operator">&gt; github<span class="token punctuation">.com<span class="token operator">/golang<span class="token operator">/crypto v0<span class="token punctuation">.<span class="token number">0.0<span class="token operator">-<span class="token number">20190313024323<span class="token operator">-a1f597ede03a
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
</div>
<br><br></div>
</div>
<div>&nbsp;</div>
<p>&nbsp;</p>
<div>
<div>
<h3>GO111MODULE</h3>
<p>GO111MODULE 有三个值:off, on和auto(默认值)。</p>
<p>GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。<br>
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。<br>
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:</p>

</div>

<br><br>作者:若与<br>链接:https://www.jianshu.com/p/760c97ff644c<br>来源:简书<br>著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<p>module declares its path as: go.etcd.io/bbolt,but was required as: github.com/coreos/bbolt · Issue #11749 · etcd-io/etcd https://github.com/etcd-io/etcd/issues/11749<br><br></p>
<p>cat go.mod<br>module Test</p>
<p>go 1.16</p>
<p>replace (<br>      github.com/coreos/bbolt =&gt; go.etcd.io/bbolt v1.3.5<br>      go.uber.org/atomic =&gt; github.com/uber-go/atomic v1.5.0<br>      google.golang.org/grpc =&gt; google.golang.org/grpc v1.29.1<br>)</p>
<p>require (<br>      github.com/PuerkitoBio/goquery v1.6.1<br>      github.com/aliyunmq/mq-http-go-sdk v1.0.3<br>      github.com/cloopen/go-sms-sdk v0.0.0-20200702015230-7c5619f80c9e<br>      github.com/coreos/bbolt v0.0.0-00010101000000-000000000000 // indirect<br>      github.com/coreos/etcd v3.3.25+incompatible // indirect<br>      github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect<br>      github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect<br>      github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect<br>      github.com/go-kratos/kratos v1.0.0<br>      github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c // indirect<br>      github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 // indirect<br>      github.com/gogo/protobuf v1.3.2<br>      github.com/golang/protobuf v1.5.2<br>      github.com/google/wire v0.5.0<br>      github.com/qiniu/api.v7/v7 v7.8.2<br>      github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726<br>      github.com/valyala/fasthttp v1.24.0 // indirect<br>      go.etcd.io/etcd v3.3.25+incompatible<br>      go.mongodb.org/mongo-driver v1.5.1<br>      google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab<br>      google.golang.org/grpc v1.36.1<br>)</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/papering/p/14721412.html
頁: [1]
查看完整版本: go mod replace