道可道道尽道 發表於 2019-7-27 16:23:00

go mod 无法自动下载依赖包的问题

<p>go 11以后启用了go mod功能,用于管理依赖包。</p>
<p>当执行<code>go mod init</code>生成<code>go.mod</code>文件之后,golang在<code>运行</code>、<code>编译</code>项目的时候,都会检查依赖并下载依赖包。</p>
<p>在启动了<code>go mod</code>之后,通过<code>go mod</code>下载的依赖包,不在放在<code>GOPATH/src</code>中,而是放到<code>GOPATH/pkg/mod</code>中。</p>
<p>比如我当前的<code>GOPATH=/root/go</code>,我在<code>/root/goProjects/</code>下新建了一个项目<code>gProject1</code>,并在项目下编写了一些代码,引用了一些第三方包:</p>
<ul>
<li>echo $GO111MODULE</li>
</ul>
<p><code>auto</code></p>
<ul>
<li>mkdir /root/goProjects/gProject1</li>
<li>cd /root/goProjects/gProject1</li>
<li>vi main.go</li>
<li>cat main.go</li>
</ul>
<pre><code class="language-golang">package main

import (
        "log"

        "github.com/toolkits/smtp"
)

func main() {
        //s := smtp.New("smtp.exmail.qq.com:25", "notify@a.com", "password")
        s := smtp.NewSMTP("smtp.exmail.qq.com:25", "notify@a.com", "password",false,false,false)
        log.Println(s.SendMail("notify@a.com", "ulric@b.com;rain@c.com", "这是subject", "这是body,&lt;font color=red&gt;red&lt;/font&gt;"))
}
</code></pre>
<ul>
<li>go mod init gProject1</li>
</ul>
<p><code>go: creating new go.mod: module gProject1</code></p>
<p>-cat go.mod</p>
<pre><code class="language-text">module gProject1

go 1.12
yzc:gProj
</code></pre>
<ul>
<li>go run main.go</li>
</ul>
<pre><code>如果此时报错:
build command-line-arguments: cannot load github.com/toolkits/smtp: cannot find module providing package github.com/toolkits/smtp
</code></pre>
<p>原因是因为git版本较低,<code>go get</code> 无法通过<code>git</code>下载<code>github.com/toolkits/smtp</code>到指定路径。</p>
<p>你可以手动执行一下<code>go get github.com/toolkits/smtp</code>,发现会报一个类似这样的错误:</p>
<pre><code class="language-shell"># go get github.com/toolkits/smtp
go get github.com/toolkits/smtp: git ls-remote -q https://github.com/toolkits/smtp in /root/go/pkg/mod/cache/vcs/7028097e3b6cce3023c34b7ceae3657ef3f2bbb25dec9b4362813d1fadd80297: exit status 129:
        usage: git ls-remote [--heads] [--tags][-u &lt;exec&gt; | --upload-pack &lt;exec&gt;] &lt;repository&gt; &lt;refs&gt;...
</code></pre>
<p>就是git版本太低了,无法支撑<code>go get</code>运行git时的参数调用。</p>
<h2 id="升级git">升级git</h2>
<ul>
<li>
<p>macos:<br>
<code>brew upgrade git</code></p>
</li>
<li>
<p>centos6/7</p>
</li>
</ul>
<h3 id="remove-old-git">Remove old git</h3>
<pre><code class="language-bash">sudo yum remove git*
</code></pre>
<p>centos6:</p>
<pre><code class="language-bash">sudo yum -y installhttps://centos6.iuscommunity.org/ius-release.rpm
</code></pre>
<p>centos7:</p>
<pre><code class="language-bash">sudo yum -y installhttps://centos7.iuscommunity.org/ius-release.rpm
</code></pre>
<p>sudo yum -y installgit2u-all</p>
<p>再次执行<code>go run main.go</code>:</p>
<pre><code class="language-bash">go: finding github.com/toolkits/smtp latest
go: downloading github.com/toolkits/smtp v0.0.0-20190110072832-af41f29c3d89
go: extracting github.com/toolkits/smtp v0.0.0-20190110072832-af41f29c3d89
2019/07/27 16:15:52 535 Error: ��ʹ����Ȩ���¼�������뿴: http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;&amp;id=28&amp;&amp;no=1001256
</code></pre><br><br>
来源:https://www.cnblogs.com/yzhch/p/11255591.html
頁: [1]
查看完整版本: go mod 无法自动下载依赖包的问题