欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器。

首先想说说写这个系列文章的动机。

其实作为校招生加入某头部互联网大厂一转眼已经快4年了。可以说该大厂算是比较早的用golang语言作为主要后端开发技术栈的公司了,绝大部分后端项目的语言选型都是golang。最近一年会发现许多核心的项目都在尝试使用rust语言来重写。归因无非是经过长期的迭代、优化,golang的性能已经被充分榨干了,在降本增效的大环境下,需要一些突破性的技术在硬件资源不变的情况下进一步提高服务的性能(或在当前服务性能保持不变的情况下尽可能减少硬件资源的消耗),所以rust自然进入了大家的视野。公司内大佬们也各显神通,对服务进行rust重构,最终也拿到了不俗的收益。

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

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

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

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

实现一个终端文本编辑器来学习golang语言的更多相关文章

  1. 让我们写一个 Win32 文本编辑器吧 - 2. 计划和显示

    让我们写一个 Win32 文本编辑器吧 - 2. 计划和显示 如果你已经阅读了简介,相信你已经对我们接下来要做的事情有所了解. 本文,将会把简介中基础程序修改为一个窗体应用程序.并对编辑器接下来的编辑 ...

  2. 学习Golang语言(6):类型--切片

    学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Gola ...

  3. vi文本编辑器的学习

    vi文本编辑器的启动与退出 启动:快捷键Ctrl+Alt+t进入终端, 在系统提示符($或#)的提示下,输入vi <文件名称>,可以自动载入你要编辑的文件或者新建一个文件. 退出:在指令模 ...

  4. [前端随笔][JavaScript] 制作一个富文本编辑器

    写在前面 现在网上有很多现成的富文本编辑器,比如百度家的UEditor,kindeditor,niceditor等等,功能特别的多,API也很多,要去熟悉他的规则也很麻烦,所以想自己了解一下原理,做一 ...

  5. iView + vue-quill-editor 实现一个富文本编辑器(包含图片,视频上传)

    1. 引入插件(注意IE10以下不支持) npm install vue-quill-editor --savenpm install quill --save (Vue-Quill-Editor需要 ...

  6. AUTOGUI生成的一个简易文本编辑器

    ; Generated by AutoGUI #SingleInstance Force #NoEnv SetWorkingDir %A_ScriptDir% SetBatchLines - #Inc ...

  7. [译] 通过 contentEditable 属性创建一个所见即所得的编辑器(富文本编辑器)

    译者注 这只是一篇入门教程,介绍了一些基础知识,仅供参考,切不可因此觉得富文本编辑器很简单. 创建富文本编辑器是一个非常复杂的工程,需要考虑到方方面面,也有很多坑(请参考原文第一条评论). 为免误导大 ...

  8. 富文本编辑器Django-ckeditor

    富文本编辑器Django-ckeditor 前言 刚开始学习django的时候,在后台编辑数据的时候,总是在想,功能是否太简陋了点,只能做简单的文本编辑,所以在这里记录一个富文本编辑器Django-c ...

  9. 11 vim文本编辑器

    和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上.而vim.vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vi ...

  10. JAVAEE——宜立方商城04:图片服务器FastDFS、富文本编辑器KindEditor、商品添加功能完成

    1. 学习计划 1.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 2.富文本编辑器的使用KindEditor 3.商品添加功能完成 2. 图片服务器的安装 1.存储空间可扩展. 2 ...

随机推荐

  1. 【原创】EtherCAT主站IgH解析(二)-- Linux/Windows/RTOS等多操作系统IgH EtherCAT主站移植指南

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 前言 目前,EtherCAT商用主站有:Aconti ...

  2. spring与设计模式之五委派模式

    一.定义 主要突出一个安排,派遣. 这个设计模式非常常见,不需要学习也能自然而然地用上. 从广义的角度出发,一个对象用另外一个对象就是委派. 二.经典实现 略. 三.spring实例代码 https: ...

  3. 上交大开源镜像站下架 Docker Hub 镜像

    ​ 在现代软件开发中,Docker镜像已经成为不可或缺的工具.然而,最近频频出现的Docker镜像下架事件让许多开发者措手不及.突然失去依赖的镜像,不仅打乱了项目进程,还引发了许多不便.那么,面对Do ...

  4. C#数据结构与算法入门教程,值得收藏学习!

    前言 最近看到DotNetGuide技术社区交流群有不少小伙伴提问:想要系统化的学习数据结构和算法,不知道该怎么入门,有无好的教程推荐的?,今天大姚给大家推荐2个开源.免费的C#数据结构与算法入门教程 ...

  5. GuavaCache、EVCache、Tair、Aerospike 缓存框架比较

    Guava Cache.EVCache.Tair.Aerospike 是不同类型的缓存解决方案,它们各有特点和应用场景.下面我会逐一分析这些缓存系统的优势.应用场景,并提供一些基本的代码示例. Gua ...

  6. 牛客小白月赛97 A-D题解

    AAAAAAAAAAAAAAAAAAAAA -----------------------------题解------------------------------------------- 统计数 ...

  7. P3731 题解

    简要题意是找到一条边连接使得最大团大小增加. 在补图上最大团等于最大独立集. 所以问题转化为删掉一条边使得最大独立集增加,又因为团不超过两个,所以原图是二分图,也就是使得最大匹配减少. 考虑什么样的匹 ...

  8. 怎样理解 Vue 的单向数据流?

    数据从父级组件传递给子组件,只能单向绑定. 子组件内部不能直接修改从父级传递过来的数据. 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件 ...

  9. Mac Idea中获取application.properties的值,中文乱码

    设置idea配置 将Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparen ...

  10. Mybatis ResultMap复杂对象一对多查询结果映射之collection

    Mybatis复杂对象一对多映射配置ResultMap的collection collection:一对多查询结果映射,比如user有多个订单 表结构 项目结构图 pom.xml <?xml v ...