一、Go源码学习的环境搭建 (CentOS_8)
选择的是CentOS8中最小化安装
前往家目录 cd
创建go工作空间 mkdir go
cd go
mkdir repos
获取安装包 wget https://dl.google.com/go/go1.16.2.linux-amd64.tar.gz
解压安装包 tar zxf go1.16.2.linux-amd64.tar.gz
配置go全局变量 echo "export GOROOT=/root/go/go" >> /etc/profile
echo "export GOPATH=/root/go/repos" >> /etc/profile
echo "export PATH=$PATH:/root/go/go/bin" >> /etc/profile
source /etc/profile
配置go env go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
配置yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos8_base.repo
sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
sudo sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
yum clean all
yum makecache
安装tldr yum install npm -y
yum install nodejs -y
npm install n -g
n latest
npm install -g tldr
安装编译调试环境 yum install gcc
yum install gdb
二、go env分析
· 查看每一个go环境变量的作用 go help environment (有需要可以看看)
· 依赖模块
GOROOT="/root/go/go" // Golang的安装目录
GOPATH="/root/go/go/repos" // 工作区目录的绝对地址
GO111MODULE="on" // Go moules的开关,开启之后可以不在gopath下运行go
GOMOD="/dev/null" // Go mod缓存的地址
GOPROXY="https://goproxy.cn" // Go mod下载拉取代理地址
GOSUMDB="sum.golang.org" // 校验Go mod的安全性
GOPRIVATE="" // 设置的包不走代理、验证
· 编译相关
GOARCH="amd64" // 编译环境的架构(交叉编译)
GOOS="linux" // 编译环境的操作系统
GOEXE="" // 编译后二进制文件的后缀
GOFLAGS="" // 默认编译执参数
GOCACHE="/root/.cache/go-build" // 缓存的编译结果
GOBIN="" // 编译后二进制文件地址
GOTMPDIR="" // 临时文件
GCCGO="gccgo" // "gccgo"是gcc针对go的优化的通用编译器
· CGO相关
CC="gcc" // 用于编译c代码的编译器
CXX="g++" // 用于编译c++代码的编译器
....
三、Go原文件结构
.
├── api // 由于给一个IDE解析标准的库API的文件
...
├── bin // go的可执行文件,go是所有程序的入口,gofmt会按照go语法解析语法错误
(如果有错返回语法错误位置,没错显示go文件内容,不会检测是否程序错误)
...
├── doc // go 使用文档
...
├── lib // 文档模板
...
├── misc // 其他的一些工具,相当于大杂烩,大部分是各种编辑器的G哦语言支持,还有cgo的例子等
...
├── pkg // 工具链tools二进制可执行文件,以及依赖的一些头文件与静态类库等
...
├── src // go编译器及标准库源码
├── test // 测试代码
└── VERSION // 当前版本
四、Hello World
· 写一个helloworld的go程序
vim hello.go
写入 package main
import "fmt"
func main(){
fmt.Println("hello,world")
}
执行 go run hello.go
输出 hello,world
· 自举编译源码 (可以自定义源码啦!!)
来到GOROOT上级 cd $GOROOT
cd ..
将原来的go编译器作为编译器 mv go goboot
将编译go的编译器写入配置文件 echo "export GOROOT_BOOTSTRAP=/root/go/goboot" >> /etc/profile
source /etc/profile
拉取最新的Go源码 git pull https://github.com/golang/go.git
(go version devel go1.19-0a1a092c4b Fri May 20 23:37:43 2022 +0000 linux/amd64)
(后续的源码阅读会默认选择这个版本的源码,选用其他版本会加以注释
其他版本1:go1.17.8
其他版本2:go1.16.2)
执行编译 cd go/src
./all.bash
· go build
· -v 编译时显示包名
· -p n 开启并发编译,默认情况下该值为CPU逻辑核数
· -a 强制重新构建
· -n 打印编译时用到的命令,但是不执行
· -x 打印编译时用到的命令
· -race 开启竞争检测
· go build -n hello.go 可以查看编译器执行的过程
· go install
Install 编译并安装由导入路径命名的包;
如果依赖的包没有安装,先由递归深度优先的方式拓扑排序安装依赖的包
· go run
编译并运行命令源码文件
Golang源码学习(一)----从0开始学编程
最新推荐文章于 2022-11-16 15:45:41 发布