golang笔记17--编译调试go源码
- 前置条件
- 编译源码
- 在 fmt 包中加自定义函数
- 说明
当前go语言越来越流行了,各大厂商都有加大go工程师的需求,作为go语言的学习者,我们除了要了解如何使用go语言外,也有必要了解一下如何编译、调试go源码。
本文基于Ubuntu22.04系统和较新的go1.20.7, 让大家能够快速知道如何编译、调试go源码。
前置条件
- 确保安装go并配置好环境变量
$ go version go version go1.20.7 linux/amd64
- 安装好gcc , ubuntu 系统直接使用apt即可
apt install gcc
- 在src同目录新建 VERSION 文件,内容为当前go版本,此处为1.20.7
- 注意不要将src放在安装包目录,以防覆盖了现有的go 二进制文件
编译源码
go env -w GOPROXY=https://goproxy.cn,direct
cd src
go get golang.org/x/net@latest
go mod tidy
go mod vendor
bash make.bash
输出:
Building Go cmd/dist using /home/xg/soft/go1.20.7/go. (go1.20.7 linux/amd64)
Building Go toolchain1 using /home/xg/soft/go1.20.7/go.
Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
Building Go toolchain2 using go_bootstrap and Go toolchain1.
Building Go toolchain3 using go_bootstrap and Go toolchain2.
Building packages and commands for linux/amd64.
---
Installed Go for linux/amd64 in /home/xg/soft/go1.20.7/go-dev
Installed commands in /home/xg/soft/go1.20.7/go-dev/bin
编译后生产的文件如下(多了bin和pkg文件夹):
xg@xg:~/soft/go1.20.7/go-dev$ ls
bin pkg src VERSION
在 fmt 包中加自定义函数
在 fmt.print.go 中新增 PrintlnXG 函数,如下
func PrintlnXG(a ...any) (n int, err error) {
Fprintln(os.Stdout, "hello PrintlnXG, add by xg")
return Fprintln(os.Stdout, a...)
}
重新编译生成 bin/go 二进制文件;
重新写一个hello.go 函数, 调用自定义的 fmt.PrintlnXG 函数, 如下所示:
package main
import "fmt"
func main() {
fmt.Println("test self define function!")
fmt.PrintlnXG("hello xg's function")
}
执行后,成功输出 hello PrintlnXG, add by xg 了,如下图
说明
- 测试系统 ubuntu22.04 Desktop
- go1.20.7