首页 > 其他分享 >实现一个终端文本编辑器来学习golang语言

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

时间:2024-08-03 16:06:31浏览次数:17  
标签:文本编辑 语言 项目 硬件资源 golang rust 器来


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

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

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

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

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

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

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

标签:文本编辑,语言,项目,硬件资源,golang,rust,器来
From: https://www.cnblogs.com/Ama2ingYJ/p/18340634

相关文章

  • TinyVue v3.17.0 正式发布,推出了一款基于 Quill 2.0 的富文本编辑器,功能强大、开箱即
    你好,我是Kagol。我们非常高兴地宣布,2024年6月26日,TinyVue发布了v3.17.0......
  • 【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器
    【【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器一、项目介绍1.1项目简介1.2使用方法二、本次实践介绍2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1安装Docker环境3.2检查Docker服务状态3.3检查Docker版本3.4检查docke......
  • Qt项目——文本编辑器(功能模块④)
    项目地址:GitHub-Outlier9/CatEditor:Cat文本编辑器--Qt有帮助的话各位点点star啦,感谢!如果有需要学习该项目的人,觉得看文档较为困难,可以加我联系方式,给github点个star后可免费提供学习视频!!!(11)字体颜色文字设置颜色操作,在.ui界面对colorAction转到槽,选triggered信号,然......
  • golang 如从一个通道(channel)接收数据时在预期时间没接收到,可以使用select语句和time.A
    在Go语言中,如果希望在从一个通道(channel)接收数据时设置超时,可以使用select语句和time.After函数。以下是一个示例代码,演示了如何实现这个功能:packagemainimport("fmt""time")funcmain(){//创建一个通道ch:=make(chanstring)//启动一......
  • x-cmd pkg | nvim - 命令行文本编辑器,Vim 的一个现代化分支
    目录简介快速入门功能特点Neovim插件推荐相关竞品进一步阅读简介Neovim(简称nvim)是用C语言开发的文本编辑器,是Vim的一个现代化分支,更专注于提升可扩展性和提供更现代的用户体验。它是基于Vim源代码的一个衍生版本,不是一个从头开始重写Vim或将其转换为IDE......
  • golang etcd容器构建与客户端操作踩坑实操
    目录1.问题说明2.etcd容器构建3.goalngetcd客户端实现1.问题说明在用go-zero实现相关服务时一直报错,从报错信息看应该是etcd的容器有问题,应该是之前的构建哪里出错了,所以重新构建etcd容器应用。记录下主要的踩坑情况:1.连接etcd容器没有问题,但是写入数据时一直报......
  • golang对遍历目录操作的优化
    一转眼go1.23都快发布了,时间过得真快。不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。本文默认Linux环境,不过这个......
  • golang面试题:json包变量不加tag会怎么样?
    问题json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段?怎么答如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。如果变量首字母大写,则为public。不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。加了tag,从str......
  • Golang试用阿里通义千问大语言模型
    一、控制台配置通义千问密匙官方操作指南地址控制台地址注意:一个密匙申请之后,官方给了一个月期限共计100万条Token的额度 二、代码阶段1、DashScopRequest结构体 typeEngineRolestringconst(EngineRoleUserEngineRole="user"EngineRoleSystem......
  • 【Golang 面试 - 进阶题】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客......