前面的话
我是一名即将研二的废狗,面对现在的校招环境感到无奈。知道需要什么,但我的注意力只够我集中在日常学习与日常游戏(没错,所以我是废狗)两件事上。学习上知道要去看八股文,深入学习计算机网络体系、Linux、数据库等知识。但碍于导师的存在不是很敢去专心做,本次青训营也只是消磨自己短暂的暑假时间,假装自己还没摆到谷底,唉。
项目上的那点事
从个人感受上讲,本次项目真的算的上十分简单了。给了详细的文档结构,给了简单的前端APP,只需要对着接口 CRUD 即可。感受上学到更多的应该是本次的开发过程。
项目结构
首先毒打我的就是目录文件不知道往哪放,每次想写一个函数,感觉又耦合了各个服务工作,看了三四篇关于目录结构说明的文章,最后还是看的 Github 示例代码中比较合适的 Golang增删改查示例。总共只分了五个目录:
Config存放配置文件Model存放自定义的数据结构模型,绝对不会调用其他的包,不然会引起循环调用Router配置路由,调用ControllerController上接Router实现功能, 下调用Service实现服务逻辑Service提供查询等功能。- 数据库
DBRedis, 连接数据库并对外提供接口,不会调用其他库 - 对应
Model的功能库如UserMessage,利用数据库进行增删改查等操作, 本次青训营项目中以上五个目录足够我实现基本功能,但还需要一些小小的帮助
- 数据库
Constant保存常量,方便修改的时候统一修改Test测试Gin功能模块pb单纯的保存pb文件生成的go结构体
实现顺序
本项目我是先实现了所有接口的简单格式,然后再一个一个做的,但做起来发现每一次都是步履维艰。因为实现过程中总会发现“这样做会不会更好”,“这样的命名是不是不太合适”,然后每个接口又要改一遍。
建议路由定义好后,每个接口不用实现功能,只是单纯的显示路由被调用,然后再一个一个实现,实现的过程中定义规范格式,这样改的时候也是往回改而不是全盘改。
接口开发
接口开发的第一步应该是参数校验,起初我用的是 Gin 官方给的参数,没再深入调研,后来听青训营营友说才知道有个 binding 库可以替代校验,一下把代码量和复杂度都精简了很多,全盘的改。一看就是没好好调研的错。
接口开发后的测试也是令人厌烦的,定义测试的数据这点无法跳过,但因为 go 有自动化测试工具 go test,只要写好一个接口的测试代码,后续该接口也可以通过 go test 校验逻辑,而不是每次都用 postman 或者 curl 来肉眼校对数据。
拓展性开发
其实功能上还有很多可以拓展的,比如说数据库可以实现 gorm/sqlite 等其他数据库工具,go-cache 可以换成 redis MongoDB,把原来定义的结构体抽象化为 interface 接口,各个数据库组件实现该接口,可以通过参数设置修改使用的接口,这样可以更好体验一下开发过程。
个人的那点事
……其实也没啥想说的,只能说体验了一把自己到底有多菜。本来理论上可以很快完成的事,应是拖了很久才做,还做的不是很好。