使用Golang编写文本编辑器:从零开始的学习之旅


本系列博文将带您使用Golang语言来编写您自己的文本编辑器。

首先,让我们谈谈写这个系列文章的动机。

作为校招生加入某头部互联网大厂已经有将近4年了。可以说该大厂是较早使用Golang语言作为主要后端开发技术栈的公司之一,绝大部分后端项目的语言选型都是Golang。然而,最近一年发现许多核心项目都在尝试使用Rust语言进行重写。这主要归因于经过长期的迭代和优化,Golang的性能已经被充分榨干,需要一些突破性的技术来进一步提高服务的性能,或者在当前服务性能保持不变的情况下尽可能减少硬件资源的消耗。因此,Rust自然进入了大家的视野。公司内的高级工程师们也各显神通,对服务进行Rust重构,最终也取得了不俗的收益。

笔者自然也对Rust产生了浓厚的兴趣,饶有兴致地进行了学习,并在搞明白它的各个特性后,决定去实践一下,检验自己的学习成果。于是,找到了一个基于Rust的文本编辑器项目,并跟着文章一步步地手写了下来,收获颇丰,对Rust的理解也更加深入了。

有点歪题了,言归正传。在写完Rust之后,意犹未尽的笔者正好由于一些业务调整打算转岗,在敲定接收部门并开始走活水流程之后,得到了难得的几周喘息时间,于是想着趁着这个时间用Golang语言再从零开始实现一个文本编辑器。最终花了三天时间,借鉴了上文项目的一些思路,写出了一个简易版的文本编辑器(包括展示、编辑、保存功能)。这类小项目还是比较适合用来熟悉一门编程语言,因此决定把如何从零构建一个小型娱乐向的编辑器记录下来并分享出来,供大家参考学习。对已经了解Golang,但对文本编辑器实现的来龙去脉感到疑惑的读者,这个系列文章也适合你。

总结一下,这个系列的帖子将引导您通过多个小作业的形式来构建编辑器并深入理解Golang语言。这里假定您对Golang的语法已经有一定的了解。在大多数步骤中,您都可以通过编译和运行程序来观察所做的更改。在我看来,仅仅是输入代码并观察运行结果,就可以学到很多东西。我会以commit的方式给出每一个小作业的代码示例(不一定是最优写法)供大家参考,当然非常鼓励先自己尝试完成然后和我的作对比。最终的实现效果如上图所示。目前它只支持基本的展示、编辑、保存功能,之后如果有时间会增加更多功能,如搜索、高亮等能力。

这个项目的源码我已经放在我的GitHub上,取名为zedterm。每一章都有对应的branch,每一个作业都有对应commit。当前仅更新到了文本查看功能,预期8月中旬搞定编辑、保存功能。这样一个基本的文本编辑器就已初具雏形了。

标签:游戏攻略