实践是最好的学习!但新手学习完 Go 基础后,却不知道如何进行实践,因为很多人工作中还没有机会使用 Go。这里是一些对初学者友好的项目和资源,可以作为你项目实践的基础,甚至在将来项目中使用。
## 01 实现 ZIP 算法
这个项目可以很有趣,也可能很无聊。也许你觉得标准库已经实现了。但造轮子对学习是很有帮助的,而且有标准库的实现,可以更好的对比自己实现的优劣。
通过练习这个项目,你能学习到:
- ZIP 算法的原理;
- 文件系统的工作方式;
- 如何阅读 [RFC 文件](https://www.ietf.org/rfc/rfc1951.txt);
## 02 美化 panic
相信有些人第一次看到 panic 输出的消息时,不知道如何阅读,不清楚到底在说什么,到底哪里出错了。出于帮助自己或帮助别人的目的,我们可以创建一个库,将 panic 输出的消息更友好的展示,方便阅读。
通过这个库,你将学习到:
- 错误处理;
- 字符串操作;
- 如何实现一个自己的库;
## 03 基于 Web 和 CLI 的下载管理器
开发一个下载服务,如果能够显示下载进度,这对使用者来说是很友好的,这样的下载进度功能的实现可以基于 Web 或 CLI。
尝试自己进行需求分析和设计。例如,如何从互联网读取文件,然后将文件写入本地磁盘。通过执行这两个步骤,大体上,你就实现了一个下载器。你可以一步步添加和增强相关功能来改进它。
Go 语言中文网公众号之前[推荐过相关的开源项目](https://mp.weixin.qq.com/s/ub9AQWvpfkyZJIeaJk1z5w)。
通过练习这个项目,你能学到:
- 使用 HTTP 相关包/库从网路读取文件;
- 使用 os 包写文件到磁盘,已经恢复功能(断点续传);
- 通过 goroutine 管理多个连接同时写一个文件;
- 使用 CLI I/O 分析输入参数并显示适当的进度条;
- 使用与 Web 相关的函数/库创建 Web 界面;
## 04 基于 Web 或 CLI 的闹钟或提醒器
使用日历添加闹钟或提醒的 CLI 或 Web 应用。如果你认为这很容易,试着写一篇关于它的文章。
通过这个项目,你将学习到:
- time 包的使用;
- 如何管理终端的输入、输出;
- 处理 Web 相关的知识,比如 HTTP、模板等;
## 05 数据库管理器(类似 Adminer)
[Adminer](https://www.adminer.org/) 是一个很棒的数据库管理器,但它是 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 的聊天室。这里会涉及一些细节,可以参考一些现实中的聊天室,实现一个。
通过这个项目,你将学习到:
- WebSocket 的原理、API 和 Go 对其操作;
- Goroutine 和 channel 的使用;
- Socket 编程;
## 08 发布系统
基于 Git 创建一个发布系统,这是一个 Web 项目,但同时也会涉及比较多的 Unix 相关命令操作,还会涉及权限、角色等。
通过这个项目,你将学习到:
- 对 Git 相关命令更熟悉,掌握相关工作原理;
- 在 Go 中如何运行 bash 命令;
- 权限系统相关知识;
- Web 知识;
以上这些项目是一个引子,供参考,主要想帮助那些觉得不知道如何实战的 Go 爱好者。其他常见的实战项目,比如博客、社区等。希望各位能够通过实践更好的掌握 Go 语言。
参考:<https://smoqadam.me/posts/a-few-ideas-for-your-next-go-project/>
有疑问加站长微信联系(非本文作者)