实现一个终端文本编辑器来学习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 ...
随机推荐
- ABC353
不知道为啥有断更了一周... E woc,怎么跟我出的题目这么像 先把字符串扔到一个 Trie 里面,然后对于每一个点我们考虑这一个点到根节点组成的字符串能是多少对字符串的最长公共前缀. 我们定义 \ ...
- OpenSearch 与 Elasticsearch:哪个开源搜索引擎适合您?
当谈论到搜索引擎产品时,Elasticsearch 和 OpenSearch 是两个备受关注的选择.它们都以其出色的功能和灵活性而闻名,但在一些方面存在一些差异.在本文中,我们将从功能和延展性.工具与 ...
- C#.NET与JAVA互通之AES加密解密V2024
C#.NET与JAVA互通之AES加密解密V2024 视频: 注意点: 1. KEY 和 IV 从字符串转byte数组时,双方要约定好编码,一般是UTF8. 2.明文从字符串转byte数组时,双方要约 ...
- javascript class 方法的this指向问题
踩坑记录 JavaScript 的 class 里面有两种定义方法的方式 普通函数(fun1) 箭头函数(fun2) class Obj { func1() { // write some code. ...
- Javascript高级程序设计第二章 | ch2 | 阅读笔记
HTML中的Javascript <script>元素 值得注意的几个关键字: async:立即开始下载脚本,仅对外部脚本有效.给脚本添加 async 属性的目的是告诉浏览器,不必等脚本下 ...
- Vue 3深度探索:自定义渲染器与服务端渲染
title: Vue 3深度探索:自定义渲染器与服务端渲染 date: 2024/6/14 updated: 2024/6/14 author: cmdragon excerpt: 这篇文章介绍了如何 ...
- hdu 5072 coprime不完整题解
Problem Description There are n people standing in a line. Each of them has a unique id number. Now ...
- TRL(Transformer Reinforcement Learning) PPO Trainer 学习笔记
(1) PPO Trainer TRL支持PPO Trainer通过RL训练语言模型上的任何奖励信号.奖励信号可以来自手工制作的规则.指标或使用奖励模型的偏好数据.要获得完整的示例,请查看examp ...
- linux 下新建显示器分辨率
1. 输入cvt 1920 1080 (假设需要添加的分辨率为1920x1080), 获取Mode Line # 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.1 ...
- 《DNK210使用指南 -CanMV版 V1.0》第二章 Kendryte K210简介
第二章 Kendryte K210简介 1)实验平台:正点原子DNK210开发板 2)章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail. ...