• go故障排查集锦


    问题:创建main.go时,提示“GOROOT is not defined”?

    排查思路:

    1)查询GOROOT变量,并验证是否正确;
        go env |findstr GOROOT
    

     

    2)查询GOPATH变量,并验证是否正确;
        go env |findstr GOPATH
    

    3)进入终端,直接测试是否能编译运行程序

    初步结论:golang的配置问题。

     The selected directory is not a valid home for Go SDK --->golang默认的窗口目录是存放编译器的目录;

    GOROOT是go的安装路径,windows下当你安装好go之后会自动设置该变量,但其他IDE(如:golang)启动后需要进行go SDK的路径设置,一般本地没有SDK,因此需要下载安装go版本的SDK并存放在指定路径;

     解决方法:从本地加载或直接下载对应版本的go sdk。

     

    问题:编译go程序失败?

    Error: Run after the build is not possible

    The 'main' file has the non-main package or does not contain the 'main' function

     10:52 Error running 'go build test1.go': Cannot run program "C:UserschalonAppDataLocalTempGoLand\___go_build_test1_go.exe" (in directory "C:UserschalonGolandProjectsgo_test1"): CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。

    原因分析:没有main包;

    解决方法:声明为main包即可。

     问题2:编译go程序失败?

    10:59 Error running 'go build test1.go': Cannot run program "C:UserschalonAppDataLocalTempGoLand\___go_build_test1_go.exe" (in directory "C:UserschalonGolandProjectsgo_test1"): CreateProcess error=5, 拒绝访问。

    原因分析:go程序编译成功,但不能访问执行。

    解决方法:执行受阻,设置安全规则即可。

    问题3:无法编译go程序?

    PS E:gosrcgo_classday2prac_2> go run main.go add.go
    found packages main (main.go) and add (add.go) in E:gosrcgo_classday2prac_2
    main.go:5:2: package src/go_class/day2/prac_2/add is not in GOROOT (C:Program FilesGosrcsrcgo_classday2prac_2add)

    原因分析:声明了add包,但是并未创建该目录。

    解决方法:引入目录必须从$GOPATH/src后开始计算,修改go env参数,并在项目目录下初始化mod;

      

     

     

      

    问题4:无法编译go程序?

    F:>go build test1.go
    # command-line-arguments
    .test1.go:5:1: syntax error: non-declaration statement outside function body

    原因分析:go程序中main()必须声明或调用。

    解决方法:添加main()函数。

    package main
    
    import "fmt" 
    
    func main(){
    	fmt.Println("hello world!")
    }

    问题5:无法编译go程序?

    GOROOT=null #gosetup
    GOPATH=E:go;C:Userschalongo #gosetup
    Cannot run program "ingo.exe" (in directory "E:go"): CreateProcess error=2, 系统找不到指定的文件。
    Compilation finished with exit code 126

    原因分析:缺少go.mod;

    解决方法:在项目下创建go.mod。

    问题6、无法编译main.go?

     .hello.go:5:2: undefined: test_pipe

    原因分析:main.go无法解析其他依赖包中的函数。

    解决方法:同时运行main.go及依赖文件。

    问题7、vscode无法编译go程序?

     

     

    fatal error: all goroutines are asleep - deadlock!

    原因分析:切换为终端运行程序,查看原因。pipe管道先传递了4个参数后,引发了阻塞。

    解决方法:注释行pipe<-4即可。

     

    问题8、go程序未执行完毕就退出?

    原因分析:main()会启动一个goroute,而test_goroute()会并发启动100个goroute,main执行完毕后不再执行test_goroute()的goroute线程。 

    解决方法:main()中添加等待时间即可。

    下图中在添加add的goroute后,并发执行main()的goroute完成后不会立即退出,其原因add未执行完毕会导致pipe无法从管道取到值,就不能完成main()的执行,此时无需再main()中添加时间等待。

     

  • 相关阅读:
    50种方法巧妙优化你的SQL Server数据库
    sql server数据库中选出指定范围的行的sql语句写法
    如何开启SQLSERVER数据库缓存依赖优化网站性能
    网站项目建设流程概述
    一个flash网页图片播放器
    ASP.NET中备份sqlserver数据库的方法
    ASP.NET(C#)实现一次性上传多张图片(多个文件)
    GridView使用技巧之:新增记录、GridView内数据验证、删除信息提示等
    FreeTextBox控件上传图片到指定的绝对路径的改进
    Linux环境下的32位与64位
  • 原文地址:https://www.cnblogs.com/chalon/p/15151474.html
Copyright © 2020-2023  润新知