实现一个终端文本编辑器来学习golang语言:第一章项目构建 ...

打印 上一主题 下一主题

主题 838|帖子 838|积分 2514

欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器。更多先容见https://www.cnblogs.com/Ama2ingYJ/p/18340634

这里我把我们的文本编辑器项目定名为zedterm。
首先第一步自然是初始化golang工程
  1. go mod init zedterm
复制代码
作为文本编辑器,其中重要的一个工作便是读取用户的键盘输入,并展示出来。现在我们来简朴写一个程序。这个程序会持续读取用户输入的字符,直到用户输入 'q':
  1. package main  
  2.   
  3. import (  
  4.         "bufio"  
  5.         "fmt"  
  6.         "os"  
  7. )  
  8.   
  9. func main() {  
  10.         reader := bufio.NewReader(os.Stdin)  
  11.         for {  
  12.                 char, _, err := reader.ReadRune()  
  13.                 if err != nil {  
  14.                         panic(err)  
  15.                 }  
  16.                 fmt.Printf("Entered: %c\n", char)  
  17.                 if char == 'q' {  
  18.                         break  
  19.                 }  
  20.         }  
  21. }
复制代码
如上所示,这是程序的重要步骤:

  • reader := bufio.NewReader(os.Stdin):这一行创建了一个新的读取器 reader,它从标准输入(os.Stdin)读取数据。
  • for { ... }:这是一个无穷循环,它会持续运行,直到遇到 break 语句。
  • char, _, err := reader.ReadRune():这一行从 reader 读取一个字符(rune)。如果在读取过程中发生错误,它会返回一个错误。
  • if err != nil { panic(err) }:这一行查抄 ReadRune() 是否返回了错误。如果有错误,它会调用 panic() 函数,这将终止程序并打印错误消息。
  • fmt.Printf("Entered: %c\n", char):这一行打印出读取到的字符。
  • if char == 'q' { break }:这一行查抄读取到的字符是否是 'q'。如果是,它会执行 break 语句,这将跳出无穷循环,然后程序竣事。
在项目目录下在terminal输入go run . 以运行。
上述代码非常直观,然而如果你运行的话,可能会遇到一个问题:每次按下键盘上的字符后,程序并没有直接打印而是直到敲击enter键后才打印。这是由于默认情况下,Linux 的终端把用户的输入暂时存放起来不“提交”,等用户按下回车键的时候一次性“提交”。平时用微信聊天也是这样的机制,把要说的话编辑好再一次性发出去,这符合人的使用风俗,但和文本编辑器“按键之后立刻读取、立刻反馈”的要求不符。
同时你会发现,作为一个终端的文本编辑器(如vim、nano),它缺少了光标的显示。
我们会在第二章办理这些问题,当前代码足以证实我们的项目工程设置的没问题,且已经能够正常跑起来了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表