前言
Go 版本 :
$ go version
go version go1.21.4 darwin/amd64
我想对 go 文件进行反汇编,然后就报错了:
$ go tool compile -S race.go
race.go:3:8: could not import sync (file not found)
我就惊讶了一下,标准库怎么还能找不到呢?难道是我 GOROOT 配置错了?
发现了问题原因
原来是因为 Go 团队认为 Go 安装包越来越大,就从 1.20 开始发行的安装包不再为 GOROOT 中的软件包提供预编译的.a 文件了。
Go 1.20版本中,GOROOT 下的源码将像其他用户包那样在构建后被缓存到本机 cache 中。此外,go install 也不会为 GOROOT 下的软件包安装 .a 文件。
https://github.com/golang/go/issues/47257
如何解决?
可以自行安装标准库的包
export GODEBUG=installgoroot=all
go install -v std
执行上述命令后,可以在 $GOROOT/pkg
目录下查看到对应操作系统的目录中包含了标准库的.a 文件
$ ls $GOROOT/pkg
darwin_amd64 include tool
$ ls darwin_amd64
archive context.a embed.a flag.a html internal math net.a plugin.a runtime sync text vendor
bufio.a crypto encoding fmt.a html.a io math.a os reflect runtime.a sync.a time
bytes.a crypto.a encoding.a go image io.a mime os.a reflect.a sort.a syscall.a time.a
compress database errors.a hash image.a log mime.a path regexp strconv.a testing unicode
container debug expvar.a hash.a index log.a net path.a regexp.a strings.a testing.a unicode.a
参考内容
可以看下下面两个链接的内容。或者在命令行中看看 go help install
命令的内容
$ go help install
usage: go install [build flags] [packages]
Install compiles and installs the packages named by the import paths.
....
Before Go 1.20, the standard library was installed to
$GOROOT/pkg/$GOOS_$GOARCH.
Starting in Go 1.20, the standard library is built and cached but not installed.
Setting GODEBUG=installgoroot=all restores the use of
$GOROOT/pkg/$GOOS_$GOARCH.
https://github.com/golang/go/issues/65204
验证结果
go tool compile -S race.go
<unlinkable>.Race STEXT size=202 args=0x0 locals=0x30 funcid=0x0 align=0x0
0x0000 00000 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) TEXT <unlinkable>.Race(SB), ABIInternal, $48-0
0x0000 00000 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) CMPQ SP, 16(R14)
0x0004 00004 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) PCDATA $0, $-2
0x0004 00004 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) JLS 189
0x000a 00010 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) PCDATA $0, $-1
0x000a 00010 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) PUSHQ BP
0x000b 00011 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) MOVQ SP, BP
0x000e 00014 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) SUBQ $40, SP
0x0012 00018 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) FUNCDATA $0, gclocals·ykHN0vawYuq1dUW4zEe2gA==(SB)
0x0012 00018 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/race.go:5) FUNCDATA $1, gclocals·sQxO+jiYy+d9ldxoWSePwQ==(SB)
0x0012 00018 (/Users/zly/workspace/go/src/github.com/xiaowuzai/go-example/mrace/rac
可以了
标签:src,github,zly,tool,sync,race,报错,go,com From: https://www.cnblogs.com/LanceZh/p/18224221