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


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

    前置条件

    1. 确保安装go并配置好环境变量
      $ go version
      go version go1.20.7 linux/amd64
      
      • 1
      • 2
    2. 安装好gcc , ubuntu 系统直接使用apt即可
      apt install gcc
      
      • 1
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    在 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...)
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    重新编译生成 bin/go 二进制文件
    重新写一个hello.go 函数, 调用自定义的 fmt.PrintlnXG 函数, 如下所示:

    package main
    
    import "fmt"
    
    func main() {
    	fmt.Println("test self define function!")
    	fmt.PrintlnXG("hello xg's function")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    执行后,成功输出 hello PrintlnXG, add by xg 了,如下图
    在这里插入图片描述

    说明

    1. 测试系统 ubuntu22.04 Desktop
    2. go1.20.7
  • 相关阅读:
    治疗 | 如何识别和处理消极想法
    Css 设置从上到下的渐变色: 0到70%为yellow,然后线性地变成透明。
    【LeetCode349. 两个数组的交集】——数组型哈希表,set型哈希表
    Linux中间件之redis的淘汰策略和持久化
    QT 完整项目框架 功能总览
    JS 工具函数助力高效开发 - 齐枭飞 - web前端专家
    RabbitMQ延时队列
    锁竞争导致的慢sql分析
    MySQL数据库基础操作
    linux中正则匹配
  • 原文地址:https://blog.csdn.net/u011127242/article/details/133940460