• go: no such tool “compile“(一次糟糕体验)


    这是一次离谱问题和胡搞一通莫名解决的记录

    背景:win11系统下,原有的go1.18更新到go1.19后出现了莫名的go: no sucn tool "compile"的情况。

    当时检查go env,如下:

    PS D:\Desktop> go env
    set GO111MODULE=off
    set GOARCH=amd64
    set GOBIN=
    set GOCACHE=C:\Users\user\AppData\Local\go-build
    set GOENV=C:\Users\user\AppData\Roaming\go\env
    set GOEXE=.exe
    set GOEXPERIMENT=
    set GOFLAGS=
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOINSECURE=
    set GOMODCACHE=D:\documents\gocourse\pkg\mod
    set GONOPROXY=
    set GONOSUMDB=
    set GOOS=windows
    set GOPATH=D:\software\go
    set GOPRIVATE=
    set GOPROXY=https://proxy.golang.org,direct
    set GOROOT=D:\documents\gocourse
    set GOSUMDB=sum.golang.org
    set GOTMPDIR=
    set GOTOOLDIR=D:\software\go\pkg\tool\windows_amd64
    set GOVCS=
    set GOVERSION=go1.19.2
    set GCCGO=gccgo
    set GOAMD64=v1
    set AR=ar
    set CC=gcc
    set CXX=g++
    set CGO_ENABLED=1
    set GOMOD=
    set GOWORK=
    set CGO_CFLAGS=-g -O2
    set CGO_CPPFLAGS=
    set CGO_CXXFLAGS=-g -O2
    set CGO_FFLAGS=-g -O2
    set CGO_LDFLAGS=-g -O2
    set PKG_CONFIG=pkg-config
    set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\user\AppData\Local\Temp\go-build126469990=/tmp/go-build -gno-record-gcc-switches
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    解读一下:上面的gocourse目录是我旧版本的go项目所在,而software下面的go文件夹则是go的安装路径,所以照理来说,GOPATH应该是项目路径,然后GOROOT应当是安装路径才对,但新版本安装后,啥都反过来了。连带着GOTOOLDIR参数都跟着乱了。

    另外,上面报错出现的地方其实就是一个简单的hello初级包的测试,我在run的时候直接给我报这个错误。

    PS D:\Desktop>go run test.go
    go: no sucn tool "compile"
    go: no sucn tool "compile"
    go: no sucn tool "compile"
    
    • 1
    • 2
    • 3
    • 4

    关于compile包,其实是安装路径下pkg包下的对应系列软件,windows的话就是windows_amd64,linux则是linux_amd64之类的参数。

    折腾的开始

    根据某某某网友的提示,我找了旧版本的go来重装,当然首先是卸载了原有go版本的,另外env设置文件是由专门的保存路径的,也需要删除,文件路径就是C:\Users\penta\AppData\Roaming\go下的env文件。因为新版本已经有比较完整的生态,可以直接在控制面板上面进行卸载程序,卸载完成后,顺带把环境变量也删了一批。重新打开win11终端。
    在这里插入图片描述
    右键打开了终端,重新检查一下版本,嗯,版本ok,检查参数,OH!My eye!

    PS D:\Desktop> go env
    set GO111MODULE=off
    set GOARCH=amd64
    set GOBIN=
    set GOCACHE=C:\Users\user\AppData\Local\go-build
    set GOENV=C:\Users\user\AppData\Roaming\go\env
    set GOEXE=.exe
    set GOEXPERIMENT=
    set GOFLAGS=
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOINSECURE=
    set GOMODCACHE=D:\documents\gocourse\pkg\mod
    set GONOPROXY=
    set GONOSUMDB=
    set GOOS=windows
    set GOPATH=D:\software\go
    set GOPRIVATE=
    set GOPROXY=https://proxy.golang.org,direct
    set GOROOT=D:\documents\gocourse
    set GOSUMDB=sum.golang.org
    set GOTMPDIR=
    set GOTOOLDIR=D:\software\go\pkg\tool\windows_amd64
    set GOVCS=
    set GOVERSION=go1.18.7
    set GCCGO=gccgo
    set GOAMD64=v1
    set AR=ar
    set CC=gcc
    set CXX=g++
    set CGO_ENABLED=1
    set GOMOD=
    set GOWORK=
    set CGO_CFLAGS=-g -O2
    set CGO_CPPFLAGS=
    set CGO_CXXFLAGS=-g -O2
    set CGO_FFLAGS=-g -O2
    set CGO_LDFLAGS=-g -O2
    set PKG_CONFIG=pkg-config
    set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\user\AppData\Local\Temp\go-build126469990=/tmp/go-build -gno-record-gcc-switches
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    继续折腾

    没办法,那就修改设置吧,

    PS D:\Desktop>go env -w GOPATH=D:\documents\gocourse
    go env -w GOPATH=... does not override conflicting OS environment variable
    
    • 1
    • 2

    嗯?这又什么鬼,为啥不让修改。继续百度。。。。。。没一个有用资料,都是叫unset GOPATH,但系统不识别你这个指令啊!这里不行,那就直接在用户变量里面进行定制吧。
    在这里插入图片描述
    心想,这样总可以了吧?嗯,继续go env
    ^%$&%*((,简直骂人,然后某位网友又有建议了,用超级用户模式来设置这个参数,嗯,管理员打开cmd,先看看参数,go env,嗯。。。。。。

    C:\Windows\system32>go env
    set GO111MODULE=off
    set GOARCH=amd64
    set GOBIN=
    set GOCACHE=C:\Users\user\AppData\Local\go-build
    set GOENV=C:\Users\user\AppData\Roaming\go\env
    set GOEXE=.exe
    set GOEXPERIMENT=
    set GOFLAGS=
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOINSECURE=
    set GOMODCACHE=D:\documents\gocourse\pkg\mod
    set GONOPROXY=
    set GONOSUMDB=
    set GOOS=windows
    set GOPATH=D:\documents\gocourse
    set GOPRIVATE=
    set GOPROXY=https://proxy.golang.org,direct
    set GOROOT=D:\software\go
    set GOSUMDB=sum.golang.org
    set GOTMPDIR=
    set GOTOOLDIR=D:\software\go\pkg\tool\windows_amd64
    set GOVCS=
    set GOVERSION=go1.18.7
    set GCCGO=gccgo
    set GOAMD64=v1
    set AR=ar
    set CC=gcc
    set CXX=g++
    set CGO_ENABLED=1
    set GOMOD=
    set GOWORK=
    set CGO_CFLAGS=-g -O2
    set CGO_CPPFLAGS=
    set CGO_CXXFLAGS=-g -O2
    set CGO_FFLAGS=-g -O2
    set CGO_LDFLAGS=-g -O2
    set PKG_CONFIG=pkg-config
    set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\user\AppData\Local\Temp\go-build126469990=/tmp/go-build -gno-record-gcc-switches
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    这不就改好了吗?为什么powershell不更新的?????没法子,只好重启一下,嗯,好了。运行一下:

    PS D:\Desktop> go run test.go
    Hello, I' m your father.
    
    • 1
    • 2

    真的是。。。。。。

  • 相关阅读:
    领先科技2024年3月5-7日第12届国际生物发酵展-宁泰橡塑
    冰冰学习笔记:哈希表与无序容器
    第十一届蓝桥杯模拟赛第一期
    一个简单的HTML网页 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
    销售词汇Sell In、Sell Through、Sell Out辨析
    「MobileNet V3」70 个犬种的图片分类
    【C语言经典100例题-66】(用指针解决)输入3个数a,b,c,按大小顺序输出。
    希望所有计算机学生都知道这些宝藏课程
    原理:用UE5制作一个2D游戏
    MacOS - Sonoma更新了啥
  • 原文地址:https://blog.csdn.net/weixin_44948269/article/details/127613670