Contents

go源码编译

Contents

学习go的源码编译

下载源码仓库

git clone git@github.com:golang/go.git

我选择了其中一个分支 release-branch.go1.18

git checkout release-branch.go1.18

目录结构

$ tree -d -L 2
.
├── api
├── bin
├── doc
├── lib
│   └── time
├── misc
│   ├── android
│   ├── arm
│   ├── cgo
│   ├── chrome
│   ├── ios
│   ├── linkcheck
│   ├── reboot
│   ├── swig
│   ├── trace
│   └── wasm
├── pkg
│   ├── darwin_arm64
│   ├── include
│   ├── obj
│   └── tool
├── src
│   ├── archive
│   ├── bufio
│   ├── builtin
│   ├── bytes
│   ├── cmd
│   ├── compress
│   ├── container
│   ├── context
│   ├── crypto
│   ├── database
│   ├── debug
│   ├── embed
│   ├── encoding
│   ├── errors
│   ├── expvar
│   ├── flag
│   ├── fmt
│   ├── go
│   ├── hash
│   ├── html
│   ├── image
│   ├── index
│   ├── internal
│   ├── io
│   ├── log
│   ├── math
│   ├── mime
│   ├── net
│   ├── os
│   ├── path
│   ├── plugin
│   ├── reflect
│   ├── regexp
│   ├── runtime
│   ├── sort
│   ├── strconv
│   ├── strings
│   ├── sync
│   ├── syscall
│   ├── testdata
│   ├── testing
│   ├── text
│   ├── time
│   ├── unicode
│   ├── unsafe
│   └── vendor
└── test
    ├── abi
    ├── alias3.dir
    ├── asmhdr.dir
    ├── bench
    ├── chan
    ├── closure3.dir
    ├── closure5.dir
    ├── codegen
    ├── ddd2.dir
    ├── dwarf
    ├── fixedbugs
    ├── import2.dir
    ├── import4.dir
    ├── interface
    ├── intrinsic.dir
    ├── ken
    ├── linkname.dir
    ├── method4.dir
    ├── oldescape_linkname.dir
    ├── retjmp.dir
    ├── runtime
    ├── stress
    ├── syntax
    ├── typeparam
    └── uintptrescapes.dir

94 directories

假设我要编译src/cmd/trace这个pkg

#进入目录
cd src/cmd/trace
# run下
go run ./...

此时是编译失败的,在项目根目录执行./src/make.bash脚本,

将会在./bin目录生成调试源码用的编译器,

再将GOROOT变量指向项目根目录,此时再编译就正常了