我是一名 PHP 程序员。最近对 go 语言有了兴趣,一直想找一个机会学习并实践这门有趣的语言。手头刚好有一个之前用 PHP 写的账号密码管理小工具,我决定用 go 重构这个小工具来入门 go 语言的 web 场景开发。同时我也希望自己这个实践和学习的过程能给其他向我一样,也就是对 go 语言有兴趣的人带来一些帮助。
虽然项目不大,但我还是希望有计划的来完成它。所以这将会是一个系列文章,目前我规划的步骤如下:
- 项目规划
- 开发环境搭建
- 实现前端界面
- 实现数据表创建方法
- 实现随机密码生成方法
- 实现项目安装命令
- 实现登录功能
- 实现密码项的管理功能
- 部署上线
这篇文章我会介绍一下小项目的需求和规划。除让自己对功能再进行一次梳理,也是让看到这里的各位对这个项目有个大致的了解和印象。
有人可能会问为什么不用成熟的密码管理方案,比如 1Password。目前市面上的密码管理软件的确已经足够好了,还能和登录网站, 甚至是 app 实现无缝对接,使用起来的确更加方便。但我还是觉得应该有一个属于自己的密码管理方案,无人知道的那种。所以这只是个人的衡量和考虑,我也推荐各位使用这些成熟的软件和方案。
回到项目本身。之前用 PHP 做的版本一直放在我自己的电脑上运行,要用的时候就运行 php -S localhost:8000
, 启动后,在浏览器中访问,用完了就结束命令。所以从使用形式上具备了一点安全性。但这种方式还是存在一些问题。比如我要随时记得备份我的数据库文件,在多个电脑的环境种使用时,总是要反复的复制数据库文件,也没有自动生成随机密码的功能,不得已我又写了个随机密码生成的 shell 脚本配合使用。但即便是这么难用,我也还是一直从 2013 年沿用至今。所以这个项目对我自己来说是有实用意义的。期间我也想过重构,每次要动手的时候又感觉意义不大,结果也就不了了之。go 语言让我重新燃起了这团火。
go 语言知道的比较早,但一直没有太大心思去学。原因无外乎不知道用这个来干嘛。web 领域 php 已经足够好了。go 语言对我来说,最受吸引的就是编译后的二进制文件可以复制到相同系统下直接运行。对一些修改不频繁的项目,这很有吸引力,特别是搭配微服务架构,这也是我目前迫切想要学习这门语言的原因。PHP 做微服务,做过的人都懂。
关于这个密码本项目的重构要求,我目前整理如下:
- 支持跨平台。也就是主流的系统或设备都应该可以使用。
- 支持密码生成。我之前的 php 版本就缺少这个功能,自己编随机数的感觉不是很好。
- 信息加密。这个是必须的,我要确保密码数据被人窃取了也无法知道真实内容。
- 密码项的增删改查。基础功能。
- 主密码登陆。我只要记住这一个密码就够了。
- 部署简单方便。越简单越好,最好没有 PHP 部署前的一系列环境准备工作。
- 资源占用小。资源占用小意味着成本就低。
按照上面的要求,我相应的技术选型如下:
- 采用 B/S 架构。Web 是我目前熟悉的领域,也能最快解决跨平台和设备问题。
- 使用 golang 语言。这个没的说,这次就是冲着这个语言来的。而且 go 语言本身的特性也满足了资源占用和部署上的需求。
- 使用 SQLite 数据库。应对这个项目绰绰有余了。
项目功能也比较简单,画了一个简单的流程图如下:
关于项目的介绍就到这里了,喜欢就请点个赞,也欢迎评论交流。下一篇将开始 go 开发环境的搭建,敬请关注。
有疑问加站长微信联系(非本文作者)