查看原文
其他

苦于没有 Go 实战项目?也许本文的一些想法可以试试

polarisxu 2022-11-21

The following article is from Go语言中文网 Author 站长polaris

实践是最好的学习!但新手学习完 Go 基础后,却不知道如何进行实践,因为很多人工作中还没有机会使用 Go。这里是一些对初学者友好的项目和资源,可以作为你项目实践的基础,甚至在将来项目中使用。

01 实现 ZIP 算法

这个项目可以很有趣,也可能很无聊。也许你觉得标准库已经实现了。但造轮子对学习是很有帮助的,而且有标准库的实现,可以更好的对比自己实现的优劣。

通过练习这个项目,你能学习到:

  • ZIP 算法的原理;
  • 文件系统的工作方式;
  • 如何阅读 RFC 文件[1]

02 美化 panic

相信有些人第一次看到 panic 输出的消息时,不知道如何阅读,不清楚到底在说什么,到底哪里出错了。出于帮助自己或帮助别人的目的,我们可以创建一个库,将 panic 输出的消息更友好的展示,方便阅读。

通过这个库,你将学习到:

  • 错误处理;
  • 字符串操作;
  • 如何实现一个自己的库;

03 基于 Web 和 CLI 的下载管理器

开发一个下载服务,如果能够显示下载进度,这对使用者来说是很友好的,这样的下载进度功能的实现可以基于 Web 或 CLI。

尝试自己进行需求分析和设计。例如,如何从互联网读取文件,然后将文件写入本地磁盘。通过执行这两个步骤,大体上,你就实现了一个下载器。你可以一步步添加和增强相关功能来改进它。

Go 语言中文网公众号之前推荐过相关的开源项目

通过练习这个项目,你能学到:

  • 使用 HTTP 相关包/库从网路读取文件;
  • 使用 os 包写文件到磁盘,已经恢复功能(断点续传);
  • 通过 goroutine 管理多个连接同时写一个文件;
  • 使用 CLI I/O 分析输入参数并显示适当的进度条;
  • 使用与 Web 相关的函数/库创建 Web 界面;

04 基于 Web 或 CLI 的闹钟或提醒器

使用日历添加闹钟或提醒的 CLI 或 Web 应用。如果你认为这很容易,试着写一篇关于它的文章。

通过这个项目,你将学习到:

  • time 包的使用;
  • 如何管理终端的输入、输出;
  • 处理 Web 相关的知识,比如 HTTP、模板等;

05 数据库管理器(类似 Adminer)

Adminer[2] 是一个很棒的数据库管理器,但它是 PHP 实现的,如果用 Go 实现的话,单个文件就可以部署,特别方便,而且可以利用 Go 其他的优势,可以快速构建一个基于 Web 的数据库管理器。

通过这个项目,你将学习到:

  • Web 相关的库和知识;
  • SQL 语法;
  • 管理用于浏览和管理数据库、表、行或列的数据库;
  • 如何管理使用 DB 时可能发生的安全问题;

06 CLI 文件管理器

有一个 C 语言项目:https://github.com/jarun/nnn,它是一个基于终端的文件管理器。你可以尝试使用 Go 实现一个。这个项目适合有点挑战的。

通过这个项目,你将学习到:

  • 文件系统相关操作的实现(比如 list、copy、delete、paste、open 或 read 等);
  • 为 CLI 应用创建 UI;
  • 使用 goroutine 管理后台任务(比如复制一个大文件);

07 聊天室

这个项目可以是基于普通 TCP 长连接的聊天室,也可以是基于 WebSocket 的聊天室。这里会涉及一些细节,可以参考一些现实中的聊天室,实现一个。

Go 语言中文网发布过一系列 Go 和 React 构建聊天室的文章

通过这个项目,你将学习到:

  • WebSocket 的原理、API 和 Go 对其操作;
  • Goroutine 和 channel 的使用;
  • Socket 编程;

08 发布系统

基于 Git 创建一个发布系统,这是一个 Web 项目,但同时也会涉及比较多的 Unix 相关命令操作,还会涉及权限、角色等。

通过这个项目,你将学习到:

  • 对 Git 相关命令更熟悉,掌握相关工作原理;
  • 在 Go 中如何运行 bash 命令;
  • 权限系统相关知识;
  • Web 知识;

以上这些项目是一个引子,供参考,主要想帮助那些觉得不知道如何实战的 Go 爱好者。其他常见的实战项目,比如博客、社区等。希望各位能够通过实践更好的掌握 Go 语言。

参考资料

[1]

RFC 文件: https://www.ietf.org/rfc/rfc1951.txt

[2]

Adminer: https://www.adminer.org/



推荐阅读

我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。


坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存