实现一个终端文本编辑器来学习golang语言

欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器。
首先想说说写这个系列文章的动机。
其实作为校招生加入某头部互联网大厂一转眼已经快4年了。可以说该大厂算是比较早的用golang语言作为主要后端开发技术栈的公司了,绝大部分后端项目的语言选型都是golang。最近一年会发现许多核心的项目都在尝试使用rust语言来重写。归因无非是经过长期的迭代、优化,golang的性能已经被充分榨干了,在降本增效的大环境下,需要一些突破性的技术在硬件资源不变的情况下进一步提高服务的性能(或在当前服务性能保持不变的情况下尽可能减少硬件资源的消耗),所以rust自然进入了大家的视野。公司内大佬们也各显神通,对服务进行rust重构,最终也拿到了不俗的收益。
笔者自然也对rust产生了浓厚的兴趣,饶有兴致的学了一番,搞明白了它的各个特性之后就想着去实践一下,检验自己的学习成果。于是找到了这个基于rust的文本编辑器项目,跟着文章一步步手写了下来,收获颇丰,对rust理解也更深入了。
有点歪题了言归正传,拿rust写完之后意犹未尽,恰逢由于一些业务调整打算转岗,在敲定接收部门并开始走活水流程之后,得到了难得的几周喘息时间,于是想着趁着这个时间用golang语言再把文本编辑器给从零开始实现一遍。最后花了三天时间,借鉴了上文项目的一些思路,写出了个简易版的文本编辑器(展示、编辑、保存功能)。其实这类小工程小项目还是比较适合拿来熟悉一门编程语言的,所以决定把如何从零构建一个小型娱乐向的编辑器给记录一下分享出来,供大家参考学习。当然对那些已经了解golang,但对文本编辑器实现的来龙去脉感到疑惑的读者,这个系列文章也适合你。
总结一下,这个系列的帖子将引导你通过多个小作业的形式来构建编辑器并深入理解golang语言。这里假定你对golang的语法已经有一定的了解。在大多数步骤中,你都可以通过编译和运行程序来观察所做的更改。在我看来,仅仅是输入代码并观察运行结果,就可以学到很多东西。我会以commit的方式给出每一个小作业的代码示例(不一定是最优写法)供大家参考,当然非常鼓励先自己尝试完成然后和我的作对比。最终的实现效果如上图所示。目前它只支持基本的展示、编辑、保存功能,之后如果有时间会增加更多功能,如搜索、高亮等能力。
这个项目的源码我已经放在我的github上,取名为zedterm。每一章都有对应的branch,每一个作业都有对应commit。当前仅更新到了文本查看功能,预期8月中旬搞定编辑、保存功能。这样一个基本的文本编辑器就已初具雏形了。
实现一个终端文本编辑器来学习golang语言的更多相关文章
- 让我们写一个 Win32 文本编辑器吧 - 2. 计划和显示
让我们写一个 Win32 文本编辑器吧 - 2. 计划和显示 如果你已经阅读了简介,相信你已经对我们接下来要做的事情有所了解. 本文,将会把简介中基础程序修改为一个窗体应用程序.并对编辑器接下来的编辑 ...
- 学习Golang语言(6):类型--切片
学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Gola ...
- vi文本编辑器的学习
vi文本编辑器的启动与退出 启动:快捷键Ctrl+Alt+t进入终端, 在系统提示符($或#)的提示下,输入vi <文件名称>,可以自动载入你要编辑的文件或者新建一个文件. 退出:在指令模 ...
- [前端随笔][JavaScript] 制作一个富文本编辑器
写在前面 现在网上有很多现成的富文本编辑器,比如百度家的UEditor,kindeditor,niceditor等等,功能特别的多,API也很多,要去熟悉他的规则也很麻烦,所以想自己了解一下原理,做一 ...
- iView + vue-quill-editor 实现一个富文本编辑器(包含图片,视频上传)
1. 引入插件(注意IE10以下不支持) npm install vue-quill-editor --savenpm install quill --save (Vue-Quill-Editor需要 ...
- AUTOGUI生成的一个简易文本编辑器
; Generated by AutoGUI #SingleInstance Force #NoEnv SetWorkingDir %A_ScriptDir% SetBatchLines - #Inc ...
- [译] 通过 contentEditable 属性创建一个所见即所得的编辑器(富文本编辑器)
译者注 这只是一篇入门教程,介绍了一些基础知识,仅供参考,切不可因此觉得富文本编辑器很简单. 创建富文本编辑器是一个非常复杂的工程,需要考虑到方方面面,也有很多坑(请参考原文第一条评论). 为免误导大 ...
- 富文本编辑器Django-ckeditor
富文本编辑器Django-ckeditor 前言 刚开始学习django的时候,在后台编辑数据的时候,总是在想,功能是否太简陋了点,只能做简单的文本编辑,所以在这里记录一个富文本编辑器Django-c ...
- 11 vim文本编辑器
和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上.而vim.vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vi ...
- JAVAEE——宜立方商城04:图片服务器FastDFS、富文本编辑器KindEditor、商品添加功能完成
1. 学习计划 1.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 2.富文本编辑器的使用KindEditor 3.商品添加功能完成 2. 图片服务器的安装 1.存储空间可扩展. 2 ...
随机推荐
- 通过 Canal 将 MySQL 数据实时同步到 Easysearch
Canal 是阿里巴巴集团提供的一个开源产品,能够通过解析数据库的增量日志,提供增量数据的订阅和消费功能.使用 Canal 模拟成 MySQL 的 Slave,实时接收 MySQL 的增量数据 bin ...
- Easysearch Chart 0.2.0都有哪些变化
Easysearch Chart 包更新了,让我们来看看都有哪些变化: Docker 镜像升级 Service 名称调整,支持 NodePort 模式部署 现在让我们用 NodePort 模式部署一下 ...
- 卷积神经网络-AlexNet
AlexNet 一些前置知识 top-1 和top-5错误率 top-1错误率指的是在最后的n哥预测结果中,只有预测概率最大对应的类别是正确答案才算预测正确. top-5错误率指的是在最后的n个预测结 ...
- http/https请求中如何使用Token
简介 Token就像是一个暗号,使用它就可以访问一些需要认证的系统或者服务. 那么,如何在http(s)中使用Token值呢? 使用方法 在http请求的头部字段中添加key-value.key为&q ...
- Java面试知识点(五)hashmap、hashtable和hashset
1. 关于 HashMap 的一些说法: a) HashMap 实际上是一个 "链表散列" 的数据结构,即数组和链表的结合体.HashMap 的底层结构是一个数组,数组中的每一项是 ...
- selenium验证码识别,超级鹰干超级鹰
from selenium.webdriver import Edge from selenium.webdriver.common.by import By # 在这里导入浏览器设置相关的类 fro ...
- P8571 题解
既然字符串的总长一定,不妨对于每个询问中的 \(s_k\) 的长度根号分治,假定分治阈值为 \(B\).下面令 \(L\) 为所有串长度总和. 对于长度大于 \(B\) 的字符串,这样的不同字符串至多 ...
- HTTP 和 HTTPS,为什么HTTPS安全?
HTTP协议通常承载与 TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS 默认HTTP的端口号为80,HTTPS的端口号为443 因为网 ...
- 请解释一下 JavaScript 的同源策略?
概念:同源策略是客户端脚本(尤其是Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载.这里的同源策略指的是: 协议,域名,端口 相同,同源策略是一种安全协议.指一 ...
- linux实现SSH免密登录设置,以及shell脚本实现
分享/朱季谦 最近在搭建linux集群,做了SSH免密登录的设置,正好把过程记录一下: 一.用搭建好的两台虚拟机做演示,A机器:192.168.200.129,B机器:192.168.200.128 ...