首页 > 编程语言 >读 Go 源码,可以试试这个工具

读 Go 源码,可以试试这个工具

时间:2023-07-17 10:02:20浏览次数:44  
标签:项目 试试 代码 源码 Go 可以 目录

编程发展至今,从面向过程到面向对象,再到现在的面向框架。写代码变成了一件越来越容易的事情。

学习基础语法,看看框架文档,几天时间搞出一个小项目并不是一件很难的事情。

但时间长了就会发现,一直这样飘在表面是不行的,技术永远得不到提升。

想要技术水平有一个质的飞跃,有一个很好的方法,就是读源码。

但读源码真的是一件很有挑战的事情。

想想当年自己读 Django 源码,从启动流程开始看,没走几步就放弃了,而且还放弃了很多次。

这么说吧,我对 Django 启动部分的代码,就像对英文单词 abandon 那么熟悉。

后来总结经验,发现是方法不对。

主要原因是一上来就深入细节了,事无巨细,每个函数都不想错过。结果就导致对整体没有概念,抓不住重点,又深陷无关紧要的代码。最后就是看不进去,只能放弃。

最近看了一点 Go 源码,慢慢也摸索出了一些心得。有一个方法我觉得挺好,可以带着问题去读源码,比如:

在解决问题的过程中也就对源码更熟悉了。

还有一点要注意的就是,先看整体,再看细节。

在这里推荐给大家一个工具,这个工具可以帮我们梳理出代码的整体结构,我觉得还是挺有用的。是一个开源项目:

项目地址: https://github.com/jfeliu007/goplantuml

这个项目可以分析一个 Go 项目,然后生成接口和结构体的 UML 图。有了这个图之后,基本上也就对项目整体关系有了一个基本概念,再读代码的话,相对来说会容易一些。

项目具体怎么用我倒是没仔细研究,因为老哥非常贴心的写了一个 WEB 页面:

网站链接: https://www.dumels.com/

图片

使用起来很方便,首先在页面最上方输入框输入项目地址,然后在左侧输入要分析的代码目录就可以了。默认生成的图中会包括 Fields 和 Methods。

填写好信息之后就可以生成 UML 图了。比如我输入的 src/sync,就得到了下面这张图,有了这张图,对代码结构之间的关系就更清晰了。

图片

还可以一次分析多个目录,多个目录用英文逗号分割。

如果不填写要分析的目录,则会分析整个项目,也可以选择是否要忽略某个目录。

友情提示一点,不要试图分析整个 Go 项目,可能是项目太大了,页面是不会给你返回的。

好了,本文就到这里了。你有什么好用的工具吗?欢迎给我留言交流。

标签:项目,试试,代码,源码,Go,可以,目录
From: https://www.cnblogs.com/gongxianjin/p/17559210.html

相关文章

  • mongodb副本集(PSA模式)修改节点信息
    环境:OS:Centos7mongodb:4.4.22 我们在副本集扩容的情况下,新加入节点一般设置priority和votes都为0,待新节点数据同步完成后再进行修改:主库上执行新增新的节点:myrepl:PRIMARY>rs.add({host:"192.168.1.107:29001",priority:0,votes:0})待同步完成后查看副本集配置 ......
  • spdlog日志库源码:CMake构建项目
    目录spdlog项目构成CMake构建根目录CMakeLists.txtcmake版本要求include专用cmake文件设置默认build类型编译器配置判断当前项目是否为spdlog选项开关spdlog项目构成Github源码:https://github.com/gabime/spdlogspdlog项目采用CMake构建,其一级目录结构如下$tree-L1.├─......
  • 常用语言的线程模型(Java、go、C++、python3)
    背景知识软件是如何驱动硬件的?硬件是需要相关的驱动程序才能执行,而驱动程序是安装在操作系统内核中。如果写了一个程序A,A程序想操作硬件工作,首先需要进行系统调用,由内核去找对应的驱动程序驱使硬件工作。而驱动程序怎么让硬件工作的呢?驱动程序作为硬件和操作系统之间的媒介,可以......
  • GoLand中使用PlantUML生成Go UML图,使用go-callvis生成Go 调用关系图
    1.在golandIDE中安装plantuml插件2.安装go-package-plantuml工具goget--insecuregitee.com/jscode/go-package-plantuml.git修改go-package-plantuml代码支持outputfileifopts.OutputFile==""{result.OutputToFile("/tmp/uml.txt")}else{result.OutputToFile(opts.Ou......
  • mongodb从库无法启动一例(replication_recovery.cpp)
    环境:OS:centos7mongodb:4.4.22背景:1主1从1仲裁的环境,修改从库的集群ip后,执行如下操作后发现无法启动myrepl:PRIMARY>rs.remove("192.168.1.104:29001")myrepl:PRIMARY>conf=rs.conf()myrepl:PRIMARY>conf.members[1].host="192.168.1.107:29001"myrepl:PRIMARY>rs.r......
  • kafka-es.go
    packageesimport("context""encoding/json""fmt""kafka/mongo""log""os""github.com/olivere/elastic")varclient*elastic.Clientvarhost="http://192.168.184.10:9200"......
  • legowall
    毒瘤问题~雾~首先我们可以先考虑一行的话有多少种方案,,这是一个经典问题答案就是斐波那契数列f[i]=f[i-1]+f[i-2],那么如果我们考虑H高怎么样?因为有H 的高度,故还要进行H次幂。让dp[i] 表示处理到第 i 列有多少个方案那么转移方式就是dp[i]=fib[i]-sum(dp[j]*fib[i-j]......
  • A014 《太阳系的秘密》编程 源码
    一、课程介绍在本节课中,将会了解太阳系的基本情况,绘制出一个太阳系。在这个过程中,理解for循环结合列表的使用方法,掌握使用random.randint(a,b)产生随机整数的方法。二、知识重难点解析利用列表实现for循环将for循环后边的range()替换成列表后,for循环会按顺序依次提取列......
  • VSCode - go error: gopls was not able to find modules in your workspace
    goplswasnotabletofindmodulesinyourworkspace.WhenoutsideofGOPATH,goplsneedstoknowwhichmodulesyouareworkingon.YoucanfixthisbyopeningyourworkspacetoafolderinsideaGomodule,orbyusingago.workfiletospecifymultiplem......
  • MongoDB导入导出
    物理备份物理备份是指将MongoDB数据库文件复制到备份服务器或存储设备上。MongoDB使用的是一种称为"copy-on-write"的技术,这意味着当修改MongoDB数据库时,MongoDB会将数据复制到一个新的文件中,而原始文件仍然保留不变。这使得可以在不中断服务的情况下备份MongoDB数据库。 物理......