此代码使用golang的先前版本(1.8.3)进行了编译,但是升级到新的golang(1.9)后无法编译
~/src/gopath/src/github.com/scottstensland/infosynth $ go build infosynth.go # runtime /usr/local/go/src/runtime/mstkbar.go:151:10: debug.gcstackbarrieroff undefined (type struct { allocfreetrace int32; cgocheck int32; efence int32; gccheckmark int32; gcpacertrace int32; gcshrinkstackoff int32; gcrescanstacks int32; gcstoptheworld int32; gctrace int32; invalidptr int32; sbrk int32; scavenge int32; scheddetail int32; schedtrace int32 } has no field or method gcstackbarrieroff) /usr/local/go/src/runtime/mstkbar.go:162:24: division by zero /usr/local/go/src/runtime/mstkbar.go:162:43: invalid expression unsafe.Sizeof(composite literal) /usr/local/go/src/runtime/mstkbar.go:162:44: undefined: stkbar /usr/local/go/src/runtime/mstkbar.go:212:4: gp.stkbar undefined (type *g has no field or method stkbar) /usr/local/go/src/runtime/mstkbar.go:213:15: gp.stkbar undefined (type *g has no field or method stkbar) /usr/local/go/src/runtime/mstkbar.go:216:23: undefined: stackBarrierPC /usr/local/go/src/runtime/mstkbar.go:226:28: gp.stkbarPos undefined (type *g has no field or method stkbarPos) /usr/local/go/src/runtime/mstkbar.go:227:19: gp.stkbarPos undefined (type *g has no field or method stkbarPos) /usr/local/go/src/runtime/mstkbar.go:248:41: undefined: stkbar /usr/local/go/src/runtime/mstkbar.go:227:19: too many errors
有任何想法吗 ?实际上,任何golang版本升级都会发生此错误,而不仅仅是我在这里提到的版本。
PS 发行时也会遇到相同的错误:go -v -t。/ …
解决方案:您必须先删除以前的golang安装,然后再安装新的go版本
type go # issue this to confirm where your go lives
典型输出:
go is /usr/local/go/bin/go # delete /usr/local/go not just /usr/local/go/bin/go
所以就删除它
sudo rm -rf /usr/local/go # OP's missing step else above errors
在安装新版本之前
export golang_ver=$(curl https://golang.org/VERSION?m=text 2> /dev/null) wget https://storage.googleapis.com/golang/${golang_ver}.linux-amd64.tar.gz sudo tar -C /usr/local -xzf ${golang_ver}.linux-amd64.tar.gz