go开发遇到的问题
<p>1. go mod tidy : dial tcp xx:443: i/o timeout,</p><p>因为go 1.17 默认的GOPROXY=<code>https://proxy.golang.org,direct ,在墙内无法访问。</code></p>
<p>所以在.zshrc /.bashrc 加上环境变量</p>
<div class="cnblogs_code">
<pre>export GOPROXY=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">goproxy.io</span>
export GO111MODULE=on</pre>
</div>
<p> </p>
<p>2. go1.17. GoLand 2021.2.3. 因为有些旧的依赖包,不希望启用go module. 在GOPATH下设置了路径,把依赖包放到了GOPATH的src下,Go Modules下的Enable Go modules integration也没打上勾,但go build时报</p>
<div class="cnblogs_code">
<pre></pre>
<p>package common/crypto is not in GOROOT (/usr/local/go/src/common/crypto)</p>
<p>handler.go:4:2: package common/db is not in GOROOT (/usr/local/go/src/common/db)</p>
</div>
<p> 但GOPATH已设置, 而且也没启用module模式</p>
<p>go env GO111MODULE 发现是auto,想改成off,用命令</p>
<div class="cnblogs_code">
<pre>go <span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> GO111MODULE=off</pre>
</div>
<p>但下面出了警告</p>
<p>warning: go env -w GO111MODULE=... does not override conflicting OS environment variable</p>
<p>在GoLand的控制台打go env GO111MODULE 发现还是auto,但在mac的控制台下go env GO111MODULE 是off</p>
<p>此时要把module模式改成off们需要在.zshrc上加上</p>
<div class="cnblogs_code">
<pre>export GO111MODULE=off</pre>
</div>
<p> </p>
<p>3.如果本地有个common module,希望引入本地common, 需要加</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">cd common
go mod init common</span></pre>
</div>
<p> </p>
<div class="cnblogs_code">
<pre>cd hallServer<br>go mod edit -replace common=../common<br>go mod tidy</pre>
</div>
<p>表示common这个module就是../common</p>
<p>此时打开go.mod, 有一条common是个虚拟的版本号</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)"> require (
</span><span style="color: rgba(128, 0, 128, 1)">6</span> common v0.<span style="color: rgba(128, 0, 128, 1)">0.0</span>-<span style="color: rgba(128, 0, 128, 1)">00010101000000</span>-<span style="color: rgba(128, 0, 128, 1)">000000000000</span>
<span style="color: rgba(128, 0, 128, 1)">7</span> github.com/gin-gonic/gin v1.<span style="color: rgba(128, 0, 128, 1)">7.4</span>
<span style="color: rgba(128, 0, 128, 1)">8</span> )</pre>
</div>
<p> </p>
<p>4. go 1.17. </p>
<p>问题描述:</p>
<p>common 包要依赖github.com/jb00007 ,但在common包 go mod tidy时</p>
<div class="cnblogs_code">
<pre>common/<span style="color: rgba(0, 0, 0, 1)">tcp imports
github.com</span>/jb00007/common/log: cannot <span style="color: rgba(0, 0, 255, 1)">find</span> module providing package github.com/jb00007/common/log: module github.com/jb00007/common/log: git <span style="color: rgba(0, 0, 255, 1)">ls</span>-remote -q origin <span style="color: rgba(0, 0, 255, 1)">in</span> /Users/gaoxianghu/go/pkg/mod/cache/vcs/48e703907eff3f5c3f402971dfd15fbaf97b52b1b7cf00f1fdb40daa9dac5325: exit status <span style="color: rgba(128, 0, 128, 1)">128</span><span style="color: rgba(0, 0, 0, 1)">:
fatal: could not read Username </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://github.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">golang.org/doc/faq#git_https for additional information.</span>
common/<span style="color: rgba(0, 0, 0, 1)">tcp imports
github.com</span>/jb00007/common/util: cannot <span style="color: rgba(0, 0, 255, 1)">find</span> module providing package github.com/jb00007/common/util: module github.com/jb00007/common/util: git <span style="color: rgba(0, 0, 255, 1)">ls</span>-remote -q origin <span style="color: rgba(0, 0, 255, 1)">in</span> /Users/gaoxianghu/go/pkg/mod/cache/vcs/48e703907eff3f5c3f402971dfd15fbaf97b52b1b7cf00f1fdb40daa9dac5325: exit status <span style="color: rgba(128, 0, 128, 1)">128</span><span style="color: rgba(0, 0, 0, 1)">:
fatal: could not read Username </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://github.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">golang.org/doc/faq#git_https for additional information.</span>
common/<span style="color: rgba(0, 0, 0, 1)">jbcoder tested by
common</span>/<span style="color: rgba(0, 0, 0, 1)">jbcoder.test imports
github.com</span>/jb00007/common/tcp: cannot <span style="color: rgba(0, 0, 255, 1)">find</span> module providing package github.com/jb00007/common/tcp: module github.com/jb00007/common/tcp: git <span style="color: rgba(0, 0, 255, 1)">ls</span>-remote -q origin <span style="color: rgba(0, 0, 255, 1)">in</span> /Users/gaoxianghu/go/pkg/mod/cache/vcs/48e703907eff3f5c3f402971dfd15fbaf97b52b1b7cf00f1fdb40daa9dac5325: exit status <span style="color: rgba(128, 0, 128, 1)">128</span><span style="color: rgba(0, 0, 0, 1)">:
fatal: could not read Username </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://github.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">golang.org/doc/faq#git_https for additional information.</span>
common/<span style="color: rgba(0, 0, 0, 1)">tcp tested by
common</span>/<span style="color: rgba(0, 0, 0, 1)">tcp.test imports
github.com</span>/jb00007/common/jbcoder: cannot <span style="color: rgba(0, 0, 255, 1)">find</span> module providing package github.com/jb00007/common/jbcoder: module github.com/jb00007/common/jbcoder: git <span style="color: rgba(0, 0, 255, 1)">ls</span>-remote -q origin <span style="color: rgba(0, 0, 255, 1)">in</span> /Users/gaoxianghu/go/pkg/mod/cache/vcs/48e703907eff3f5c3f402971dfd15fbaf97b52b1b7cf00f1fdb40daa9dac5325: exit status <span style="color: rgba(128, 0, 128, 1)">128</span><span style="color: rgba(0, 0, 0, 1)">:
fatal: could not read Username </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://github.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: terminal prompts disabled
Confirm the import path was entered correctly.</span></pre>
</div>
<p><span class="s1"><span class="Apple-tab-span">好像是无法在github.com下载 github.com/jb00007 里的东西,只能用本地的jb00007包, 于是</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">cd jb00007
go mod init github.com</span>/<span style="color: rgba(0, 0, 0, 1)">jb00007
go mod tidy
cd ..</span>/<span style="color: rgba(0, 0, 0, 1)">common
go mod edit </span>-replace github.com/jb00007=../<span style="color: rgba(0, 0, 0, 1)">jb00007
go mod tidy</span></pre>
</div>
<p>其中在jb00007中go mod tidy时报:</p>
<div class="cnblogs_code">
<pre>go: github.com/jb00007/jbserver2/<span style="color: rgba(0, 0, 0, 1)">KenoServer imports
github.com</span>/googleapis/google-cloud-go/civil: github.com/googleapis/google-cloud-go@v0.<span style="color: rgba(128, 0, 128, 1)">97.0</span><span style="color: rgba(0, 0, 0, 1)">: parsing go.mod:
module declares its path as: cloud.google.com</span>/<span style="color: rgba(0, 0, 0, 1)">go
but was required as: github.com</span>/googleapis/google-cloud-go</pre>
</div>
<p>但对common的go mod tidy没影响,所以也没管这个问题,但当我 到hallServer下执行go mod tidy时就报下面</p>
<div class="cnblogs_code">
<pre>cd hallServer<br>go mod tidy<br><br>o: downloading golang.org/x/net v0.<span style="color: rgba(128, 0, 128, 1)">0.0</span>-<span style="color: rgba(128, 0, 128, 1)">20211008194852</span>-<span style="color: rgba(0, 0, 0, 1)">3b03d305991f
go mod tidy: error loading go </span><span style="color: rgba(128, 0, 128, 1)">1.16</span> module graph: common@v0.<span style="color: rgba(128, 0, 128, 1)">0.0</span>-<span style="color: rgba(128, 0, 128, 1)">00010101000000</span>-<span style="color: rgba(128, 0, 128, 1)">000000000000</span><span style="color: rgba(0, 0, 0, 1)"> requires
github.com</span>/jb00007@v0.<span style="color: rgba(128, 0, 128, 1)">0.0</span>-<span style="color: rgba(128, 0, 128, 1)">00010101000000</span>-<span style="color: rgba(128, 0, 128, 1)">000000000000</span>: invalid github.com import path <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">github.com/jb00007</span><span style="color: rgba(128, 0, 0, 1)">"<br><br></span></pre>
<p class="p2"><span class="s1">If reproducibility with go 1.16 is not needed:</span></p>
<p class="p1"><span class="s1">go mod tidy -compat=1.17</span></p>
<p class="p2"><span class="s1"><span class="Apple-tab-span"> </span></span></p>
</div>
<p>这问题是loading了工1.16的module graph,但我是1.17呀,于是照着说明运行 <span class="s1">go mod tidy -compat=1.17 就ok了。</span></p>
<p><span class="s1"> ========</span></p>
<p><span class="s1">上面的项目在蹈入Goland时会有很多包没下下来,可能是因为jb00007 go mod tidy没有成功的关系,因为jb00007依赖的包找不到。把jb00007目录删除,common里引用到jb00007里的代码先注掉,然后把common 的 mod包引用到jb00007的都删掉,然后在common下重新go mod tidy,这次成功了。然后把hallServer,pushServer,subGame/zjh,subGame/rummy, subGame/nn,subGame/hhdz重新go mod tidy, go build,成功。重新在Goland打开项目,发现包都可以找到了。</span></p>
<p>在go mod tidy 时,有时会发生:</p>
<div class="cnblogs_code">
<pre>subGame/<span style="color: rgba(0, 0, 0, 1)">nn imports
common</span>/<span style="color: rgba(0, 0, 0, 1)">db imports
github.com</span>/denisenkom/go-<span style="color: rgba(0, 0, 0, 1)">mssqldb imports
cloud.google.com</span>/go/<span style="color: rgba(0, 0, 0, 1)">civil tested by
cloud.google.com</span>/go/<span style="color: rgba(0, 0, 0, 1)">civil.test imports
github.com</span>/google/go-<span style="color: rgba(0, 0, 255, 1)">cmp</span>/<span style="color: rgba(0, 0, 255, 1)">cmp</span> loaded from github.com/google/go-<span style="color: rgba(0, 0, 255, 1)">cmp</span>@v0.<span style="color: rgba(128, 0, 128, 1)">2.0</span><span style="color: rgba(0, 0, 0, 1)">,
but go </span><span style="color: rgba(128, 0, 128, 1)">1.16</span> would <span style="color: rgba(0, 0, 255, 1)">select</span> v0.<span style="color: rgba(128, 0, 128, 1)">5.5</span></pre>
</div>
<p>可能是在本地找到的低版本的包(<span class="s1">go-cmp@v0.2.0</span>),但建议的是更高的版本(<span class="s1">go-cmp@v0.5.5</span>),</p>
<p>按照建议执行go mod tidy -go=1.16 && go mod tidy -go=1.17即可</p>
<div class="cnblogs_code">
<pre>To upgrade to the versions selected by go <span style="color: rgba(128, 0, 128, 1)">1.16</span><span style="color: rgba(0, 0, 0, 1)">:
go mod tidy </span>-go=<span style="color: rgba(128, 0, 128, 1)">1.16</span> && go mod tidy -go=<span style="color: rgba(128, 0, 128, 1)">1.17</span><span style="color: rgba(0, 0, 0, 1)">
If reproducibility with go </span><span style="color: rgba(128, 0, 128, 1)">1.16</span><span style="color: rgba(0, 0, 0, 1)"> is not needed:
go mod tidy </span>-compat=<span style="color: rgba(128, 0, 128, 1)">1.17</span><span style="color: rgba(0, 0, 0, 1)">
For other options, see:
https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">golang.org/doc/modules/pruning</span></pre>
</div>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
喜欢艺术的码农<br><br>
来源:https://www.cnblogs.com/zjhgx/p/15336147.html
頁:
[1]