golang笔记17--编译调试go源码

golang笔记17--编译调试go源码

  • 前置条件
  • 编译源码
  • 在 fmt 包中加自定义函数
  • 说明

当前go语言越来越流行了,各大厂商都有加大go工程师的需求,作为go语言的学习者,我们除了要了解如何使用go语言外,也有必要了解一下如何编译、调试go源码。
本文基于Ubuntu22.04系统和较新的go1.20.7, 让大家能够快速知道如何编译、调试go源码。

前置条件

  1. 确保安装go并配置好环境变量
    $ go version
    go version go1.20.7 linux/amd64
    
  2. 安装好gcc , ubuntu 系统直接使用apt即可
    apt install gcc
    
  3. 在src同目录新建 VERSION 文件,内容为当前go版本,此处为1.20.7
  4. 注意不要将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

golang笔记17--编译调试go源码_第1张图片

在 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...)
}

golang笔记17--编译调试go源码_第2张图片
重新编译生成 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 了,如下图
在这里插入图片描述

说明

  1. 测试系统 ubuntu22.04 Desktop
  2. go1.20.7

你可能感兴趣的:(Golang,golang,编译go源码,调试go源码,go源码)