首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

如何调试Go语言自身的源码运行Go语言自身的源码报错

  • 25-03-05 12:22
  • 3648
  • 8649
blog.csdn.net

作为一名Gopher,可能都很想从源码级别去熟悉了解Go,但对于初学者,这可能有点障碍,因为go源码打开后,不能使用go run运行代码也不能进行调试,本文就是为了打破这个障碍,扫清我们学习Go自身源码的挡路石。

准备

  1. 克隆Go源码

    jagitch@34c4dd4d4a3e:opensource$ git clone https://github.com/golang/go.git
    Cloning into 'go'...
    remote: Enumerating objects: 615933, done.
    remote: Counting objects: 100% (22992/22992), done.
    remote: Compressing objects: 100% (846/846), done.
    remote: Total 615933 (delta 22421), reused 22171 (delta 22146), pack-reused 592941
    Receiving objects: 100% (615933/615933), 343.05 MiB | 1.33 MiB/s, done.
    Resolving deltas: 100% (489881/489881), done.
    Updating files: 100% (13308/13308), done.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果github克隆很慢或存在网络问题,请参考github无法访问克隆不了项目下载失败没反映的解决方法

  2. 如果vscode没有安装Go扩展,请安装

问题

如果不进行任何配置,打开Go源码项目后很多代码会爆红,调试时也会报错,如果安装的go版本低于Go源码也会出现问题。

在这里插入图片描述

解决方法:

  1. 切换git仓库到需要调试的go版本,此处以go1.22.3版本为例,go的版本可以通过git tag查看

    jagitch@34c4dd4d4a3e:go$ git checkout -b go1.22.3.study go1.22.3
    Switched to a new branch 'go1.22.3.study'
    
    jagitch@34c4dd4d4a3e:go$ git branch
    * go1.22.3.study
      master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  2. 进入到go源码的src目录

    jagitch@34c4dd4d4a3e:go$ cd src
    
    • 1
  3. 执行make.bash,从源码构建go1.22.3

    jagitch@34c4dd4d4a3e:src$ . ./make.bash
    Building Go cmd/dist using /usr/local/go. (go1.22.2 linux/amd64)
    Building Go toolchain1 using /usr/local/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/coder/workspace/opensource/go
    Installed commands in /home/coder/workspace/opensource/go/bin
    *** You need to add /home/coder/workspace/opensource/go/bin to your PATH.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  4. 查看go路径和版本

    jagitch@34c4dd4d4a3e:src$ which go
    /home/coder/workspace/opensource/go/bin/go
    jagitch@34c4dd4d4a3e:src$ go version
    go version go1.22.3 linux/amd64
    
    • 1
    • 2
    • 3
    • 4

    此时已编译好指定的go1.22.3这个版本了

  5. 在vscode中打开项目,然后打开命令面板,输入go choose 搜索然后点击Go: Choose Go Environment

    在这里插入图片描述

    选择当前Go源码目录下编译的go可执行程序,如果没有,则关闭vscode,重新打开vscode。
    在这里插入图片描述

  6. 到目前为止,就已经可以运行和调试go源码,这里以src/cmd/compile/main.go为例进行演示

    在这里插入图片描述

  7. 直接运行main.go

    jagitch@34c4dd4d4a3e:go$ cd src/cmd/compile/
    
    jagitch@34c4dd4d4a3e:compile$ go run main.go -V
    I'm debugging with the source code of go
    main version go1.22.3
    
    jagitch@34c4dd4d4a3e:compile$ which go
    /home/coder/workspace/opensource/go/bin/go
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  8. 如果需要全局使用此次编译的go版本,则将它配置到PATH环境变量中即可(配置到~/.bashrc)

    jagitch@34c4dd4d4a3e:compile$ echo 'export /home/coder/workspace/opensource/go/bin' >> ~/.bashrc
    
    jagitch@34c4dd4d4a3e:compile$ source ~/.bashrc
    
    • 1
    • 2
    • 3
  9. 如果是用于学习Go源码,建议搭建浏览器版的vscode,这样就可以使用手机和平板打开浏览器随时浏览Go语言,并且拥有vscode中所有功能,可以转到代码定义,可以进行调试,很方便。可以参考搭建Golang在线开发环境(随时随地码代码)

推荐阅读

1. github无法访问克隆不了项目下载失败没反映的解决方法
2. Vs code调试Go程序时怎样查看CPU寄存器的值
3. 搭建Golang在线开发环境(随时随地码代码)

文章知识点与官方知识档案匹配,可进一步学习相关知识
Go技能树首页概览4816 人正在系统学习中
注:本文转载自blog.csdn.net的gopyer的文章"https://blog.csdn.net/fuxily/article/details/139304596"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top