源码阅读

环境搭建

前面已经提到,etcd是用Go语言开发的,所以在阅读源码之前需要搭建Go 语言的开发环境。

编辑器

打出编辑器这三个字的时候,不自觉地,我打了个激灵(😓)。在程序员这个圈子里,对于编辑器的选择,就好像说“PHP是世界上最好的语言”一样。是个梗,而且一直争论不休,从未有谁能够完胜别人。 当然,我这里提编辑器,并不想争论各个编辑器的优劣。我只是介绍几种选择方案,以及我自己的开发环境。

由于在本系列文章里面,主要是围绕IPFS的Go语言相关的源码。一方面是因为Go语言的实现更全,代码完成度更高。此外也有我自己作为技术人员的一点小偏执。所以以下编辑器主要围绕Go语言来展开。

Goland

JetBrains,想必这个名字在程序员的圈子里,绝大多数人都听过,或者正在使用他们的产品。是的,goland就是大名鼎鼎的JetBrains出品的一款针对Go语言的编辑器。可以说简单、无脑容易上手,同时也很好用。也支持一些常见的快捷键以及自定义环境,可以说是一款相当不错的编辑器。

嗯,当然有缺点,那就是慢!此外,JetBrains出品的产品都是高度语言定制化。Python有pycharm,java有idea,前端有webstorm。作为一个经常需要同时写几门开发语言的同学来说,相当受罪。 之前我也有过一段时间与编辑器的斗争,最后还是毅然而然的抛弃了JetBrains 全家桶。

VIM

毫无疑问,VIM确实非常强大。 我这里说VIM打开文件的速度超越任何编辑器,相信大家没意见吧? 同时VIM也是最轻量的编辑工具,同时也不限开发语言。

尽管VIM有这么多优点,但是其缺点也相当明显,VIM本身没有带任何的语法提示、语法校验、格式化等等人性化的功能。 需要配置插件。 所以在VIM使用过程中,要维护一个相当长的配置文件,从插件到快捷键。如果对VIM熟悉的同学来说,使用起来确实相当快捷,但是对对于那些初学者,或者对VIM不够熟悉的同学来说,以VIM为日常开发环境反而影响开发效率。

但,我知道,很多人不愿意舍弃VIM,尤其是在unix环境下开发的同学。

VSCode

在遇到Vscode之前,其实我觉得大多数编辑器都没啥区别。直到开始使用Vscode,慢慢变成vscode忠实用户。 我才知道,原来天下编辑器共分两类:一类是Vscode,一类是其他。

请原谅我对Vscode的推崇,因为它确实好用。

打造VIM+Vscode+Go语言的开发环境

Vscode的安装

  • Mac安装

    mac下安装vscode相当简单,在官网下载一个vscode dmg然后安装就ok。官网地址

  • Windows下安装

    跟mac下一样,下载对应的exe文件,然后安装即可。

  • Linux下安装

    俗话说的好,你都使用Linux了,安装软件的事情,肯定相当熟悉。

Go语言安装

Windows安装:

有两种安装方式,源码安装以及MSI安装,本文介绍以应用程序安装。

Mac安装:

Linux安装:

Linux下安装更加简单,设置环境变量的方式跟mac下基本一致。

  • Linux下之后可以用yum install go(CentOS). apt-get install go (Ubuntu)

  • 设置环境变量

Git的安装:

VsCode配置

VsCode上手非常容易,其实不需要做任何配置都可以玩的很溜。当然,为了进一步提高开发效率,所以还是可以做一些必要的配置。

插件安装 安装完成打开vscode, 点击左侧栏目的红色序号标注的1,然后在搜索框搜索Go,然后第一个就是Vscode的go语言插件,如果未安装,右侧序号2会是Install,点击安装即可。序号3区域是对此插件的介绍,以及其默认的一些配置和快捷键。

除了Go插件,开发Go语言还需要以下插件

  • Go

  • Code Runner 快捷运行Go代码 常见的快捷键是command+R(mac)windows是(ctrl+R)

  • Vim 在vscode里面使用vim编辑模式

  • VSCode Icons 根据文件名称显示图标

  • Path Intellisense 自动补全文件路径

  • TODO Highlight 高亮TODO

必要的插件就这几个吧,其他的插件,按照自己的需求选择性安装即可。

常见的快捷键 打开新窗口 command+T 打开文件夹 command+O 新建文件 command + N 关闭文件 command + W 分屏 command+D command+shift+D 还有一些其他快捷键,自己可以摸索使用。这里就不一一列举啦。

ETCD代码下载

这里我们主要剖析etcd代码 如果之前安装了Go语言,直接使用go get进行下载

// 下载代码
cd $GOPATH/src/
git clone https://github.com/etcd-io/etcd.git  go.etcd.io/etcd

当然,由于etcd的源码是用go moduler进行依赖管理的,所以源码可以不用放在GOPATH路径下。源码下载完成,就可以直接运行代码了,如果要debug代码的话, 在debug之前,需要安装一个go语言的库。

go get github.com/derekparker/delv

Debug lanch 配置文件

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${file}",     // workspaceRoot 代表当前打开文件的跟目录
            "env": {
                "GOPATH": "/Users/magic/go"
            },
            "args": [],
            "showLog": true
        }
    ]
}

执行F5 运行debug显示如下, 由此说明我们开发环境搭建ok,可以正常运行ETCD代码,进行debug。

以上,我们就搭建好了etcd的开发环境。 后面我们会在这个环境中进行代码的调试与源码分析。

项目地址

参考文章:

Last updated