go故障排查集锦
<p>问题1:创建main.go时,提示“GOROOT is not defined”?</p><p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110100042231-757495469.png"></p>
<p>排查思路:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">1)查询GOROOT变量,并验证是否正确;
go env |findstr GOROOT
</pre>
</div>
<p> <img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110100311198-1493760406.png"><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110101228345-509292774.png"></p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">2)查询GOPATH变量,并验证是否正确;
go env |findstr GOPATH
</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110101526381-373748808.png"></p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110101616026-639138648.png"></p>
<p>3)进入终端,直接测试是否能编译运行程序</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110102406931-1511388230.png"></p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110102424905-1497577006.png"></p>
<p> 初步结论:golang的配置问题。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110102730288-1557939587.png"></p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110103551415-90358052.png"></p>
<p>The selected directory is not a valid home for Go SDK --->golang默认的窗口目录是存放编译器的目录;</p>
<p>GOROOT是go的安装路径,windows下当你安装好go之后会自动设置该变量,但其他IDE(如:golang)启动后需要进行go SDK的路径设置,一般本地没有SDK,因此需要下载安装go版本的SDK并存放在指定路径;</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110103856896-1100188518.png"></p>
<p> 解决方法:从本地加载或直接下载对应版本的go sdk。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110105627407-2046940538.png"></p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110105840012-497158051.png"></p>
<p> <img src="https://img2020.cnblogs.com/blog/1617751/202111/1617751-20211110110219314-1832396791.png"></p>
<p> </p>
<p>问题2:编译go程序失败?</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202108/1617751-20210817105837836-276296404.png"></p>
<p>Error: Run after the build is not possible</p>
<p>The 'main' file has the non-main package or does not contain the 'main' function</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202108/1617751-20210817105221606-1775757743.png"></p>
<p> 10:52 Error running 'go build test1.go': Cannot run program "C:\Users\chalon\AppData\Local\Temp\GoLand\___go_build_test1_go.exe" (in directory "C:\Users\chalon\GolandProjects\go_test1"): CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。</p>
<p>原因分析:没有main包;</p>
<p>解决方法:声明为main包即可。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202108/1617751-20210817110641920-1171575705.png"></p>
<p> </p>
<p> </p>
<p> 问题3:编译go程序失败?</p>
<p>10:59 Error running 'go build test1.go': Cannot run program "C:\Users\chalon\AppData\Local\Temp\GoLand\___go_build_test1_go.exe" (in directory "C:\Users\chalon\GolandProjects\go_test1"): CreateProcess error=5, 拒绝访问。</p>
<p>原因分析:go程序编译成功,但不能访问执行。</p>
<p>解决方法:执行受阻,设置安全规则即可。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202108/1617751-20210817110905367-1051743980.png"></p>
<p> </p>
<p> 问题4:无法编译go程序,提示:</p>
<p>Build Error: go build -o e:\go\src\1go\1day\1_hello\__debug_bin.exe -gcflags all=-N -l .<br>go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)</p>
<p><img src="https://img2022.cnblogs.com/blog/1617751/202203/1617751-20220323152952073-1907285779.png"></p>
<p>原因分析:未发现go.mod;</p>
<p>解决方法:切换至项目目录下,执行go mod init命令,初始化项目即可产生go.mod;</p>
<p><img src="https://img2022.cnblogs.com/blog/1617751/202203/1617751-20220323153207571-935587463.png"></p>
<p><img src="https://img2022.cnblogs.com/blog/1617751/202203/1617751-20220323153245844-1575735645.png"></p>
<p> </p>
<p> </p>
<p>问题4:无法编译go程序?</p>
<p><img src="https://img2022.cnblogs.com/blog/1617751/202203/1617751-20220323142742244-390725910.png"></p>
<p>Build Error: go build -o e:\go\src\1go\1day\5_main_outside_function\main\__debug_bin.exe -gcflags all=-N -l .</p>
<p>main_outside_function.go:4:2: invalid import path: "E:/go/src/1go/1day/5_main_outside_function/add" (exit status 1)</p>
<p>原因分析:main在引入add包时,路径出错。</p>
<p>解决方法:引入目录必须从$GOPATH/src后开始计算,修改go env参数,并在项目目录下初始化mod;</p>
<p> <img src="https://img2022.cnblogs.com/blog/1617751/202203/1617751-20220323154005508-768268163.png"></p>
<p> </p>
<p> <img src="https://img2022.cnblogs.com/blog/1617751/202203/1617751-20220323154035049-630435290.png"></p>
<p> </p>
<p> </p>
<p> </p>
<p>问题5:无法编译go程序?</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202108/1617751-20210817112219610-1885438419.png"></p>
<p>F:\>go build test1.go<br># command-line-arguments<br>.test1.go:5:1: syntax error: non-declaration statement outside function body</p>
<p>原因分析:go程序中main()必须声明或调用。</p>
<p>解决方法:添加main()函数。</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">package main
import "fmt"
func main(){
fmt.Println("hello world!")
}</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202108/1617751-20210817112827063-1895353166.png"><img src="https://img2020.cnblogs.com/blog/1617751/202108/1617751-20210817112853541-419353018.png"></p>
<p> </p>
<p>问题6:无法编译go程序?</p>
<p>GOROOT=null #gosetup<br>GOPATH=E:\go;C:\Users\chalon\go #gosetup<br>Cannot run program "\bin\go.exe" (in directory "E:\go"): CreateProcess error=2, 系统找不到指定的文件。<br>Compilation finished with exit code 126</p>
<p>原因分析:缺少go.mod;</p>
<p>解决方法:在项目下创建go.mod。</p>
<p> </p>
<p>问题7、无法编译main.go?</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918113942086-1974643097.png"></p>
<p> .\hello.go:5:2: undefined: test_pipe</p>
<p>原因分析:main.go无法解析其他依赖包中的函数。</p>
<p>解决方法:同时运行main.go及依赖文件。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918133331926-212415895.png"></p>
<p> </p>
<p>问题8、vscode无法编译go程序?</p>
<div id="list_id_3_0" class="monaco-list-row" data-index="0" data-last-element="false">
<div class="monaco-tl-row">
<div class="monaco-tl-contents output">
<div class="output expression value-and-source"><span class="value warn"><span class="value warn"><span class="value warn"><span class="value warn"><span class="value warn"><span><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918113529775-1874617198.png"> <img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918113615289-1615344187.png"></span></span></span></span></span></span>
<p> <img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918113552385-1338446358.png"></p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918133650409-1163585583.png"></p>
<p>fatal error: all goroutines are asleep - deadlock!</p>
<p>原因分析:切换为终端运行程序,查看原因。pipe管道先传递了4个参数后,引发了阻塞。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918133941501-344849865.png"></p>
</div>
</div>
</div>
</div>
<p>解决方法:注释行pipe<-4即可。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918134216842-191482440.png"> <img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918134233939-259374393.png"></p>
<p> </p>
<p>问题9、go程序未执行完毕就退出?</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918160453472-692809734.png"></p>
<p>原因分析:main()会启动一个goroute,而test_goroute()会并发启动100个goroute,main执行完毕后不再执行test_goroute()的goroute线程。 </p>
<p>解决方法:main()中添加等待时间即可。</p>
<p><img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918160740327-495028024.png"></p>
<p>下图中在添加add的goroute后,并发执行main()的goroute完成后不会立即退出,其原因add未执行完毕会导致pipe无法从管道取到值,就不能完成main()的执行,此时无需再main()中添加时间等待。</p>
<p> <img src="https://img2020.cnblogs.com/blog/1617751/202109/1617751-20210918160821725-534189054.png"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/chalon/p/15151474.html
頁:
[1]