说明
近期在学习GO语言,想深入研读一下GO的源码,第一步就要是可以在本地正常的编译源代码,此文对MAC上go源的安装进行记录
下载go源码
1
|
git clone https://github.com/golang/go
|
选择go版本分支
本次使用go 1.8版本分支来进行编译,切换分支
1
|
git checkout release-branch.go1.8
|
本地编译
查看本地的go版本
1
|
go version go1.20.5 darwin/amd64
|
设置编译源码的go版本
1
|
export GOROOT_BOOTSTRAP=$GOROOT
|
设置go mod模式为auto
因为在go1.16后,go默认在任何路径下都开启gomod模式,待编译的go源码不需要使用gomod模式,设置其它模式为自动
1
|
export GO111MODULE=auto
|
编译
1
2
|
cd go/src
./make.bash
|
输出结果如下
Installed Go for darwin/amd64 in /Users/tomyli/github/go
Installed commands in /Users/tomyli/github/go/bin
测试验证
修改go1.8的fmt包,增加一行打印内容,打印出来 tomyli
/Users/tomyli/github/go/src/fmt/print.go
1
2
3
4
|
func Println(a ...interface{}) (n int, err error) {
println("tomyli")
return Fprintln(os.Stdout, a...)
}
|
重新编译
1
2
|
cd go/src
./make.bash
|
验证脚本
创建一个新编译的go的GOPATH
1
|
mkdir /Users/tomyli/github/go/localhost
|
测试脚本保存到localhost文件夹
main.go内容如下
1
2
3
4
5
6
7
|
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
|
配置新编译的GO的GOROOT与GOPATH变量
此步骤必须,否则执行时会从boot版本的go查找
1
2
|
export GOROOT=/Users/tomyli/github/go
export GOPATH=/Users/tomyli/github/go/localhost
|
执行
1
|
~/github/go/bin run ~/github/go/localhost/main.go
|
输出结果
tomyli
Hello world!
总结
以为源码编译会很轻松,真正实践时还是遇到了几个问题,源码编译需要有一个安装好的go,对于gomod的使用环境和GOROOT,GOPATH的变量含义更深刻了一些
REF
Captured On: [2023-09-20 Wed 11:38]
Captured On: [2023-09-20 Wed 11:38]
Captured On: [2023-09-20 Wed 14:56]