自学go和beego项目笔记
-
一个月的时间学习了go语言基础,之后开始着手用beego做项目,现在项目终于完结了,有时间总结一下自己的心得和笔记。
-
能力一般,水平有限,错误之处敬请留言指正。
-
项目简介
- 项目一,主要用到beego框架,数据库redis,mongodb,mysql,第三方oss,云片短信,聚合数据,自定义header,restful风格接口,orm模型,命名空间路由等等。
- 项目二,基于go语言gorilla包的websocket项目,涉及三方交互,设计模式观察者模式,统一接受,分开处理。
-
项目一技术要点
- 账户系统,采用jwt做token验证(jwt相较于传统session的好处在此不多说),实现账号密码登录,手机短信验证码登录,第三方微信QQ登录,短信验证码防刷机制(对同ip和同手机号进行单位时间请求次数限制)
- token刷新机制,遵从oauth2.0协议,通过access_token和refresh_token分别分配不同的过期时间,进行验证刷新token。另外token中可以自由携带一些非重要信息,方便验证数据。
- 数据缓存采用redis,自由选择使用几号库,
redis.Dial(netWork, redisUrl, redis.DialDatabase(dataBase))
,(关于redis相较于memcached优点,简单说明,redis内存型,io多路复用,单线程仍可高并发,避免了多线程频繁上下文切换,c语言实现,数据结构多,可用命令多,等等) - 数据存储,除了常规使用mysql,这里使用了mongodb,mongodb又名文档型数据库,适合存储 较长json结构数据。(项目有些json数据结构较长又没必要拆分,采用mongodb进行存储是最好的选择。)
- 设计到用户头像,用户图片数据,视频数据等存储,项目对接阿里云oss实现文件直传,比普通上传(客户端传服务器,服务器再传oss),速度快好几倍,而且使用安全灵活。
- 数据状态的使用。(数据状态好多种,这里简单就是返回数据id)
-
项目二技术要点
- 基于websocket的实时全双工通讯服务。
- 设计模式观察者模式
- 三方交互,app,服务器, 设备,做到实时通讯,实时监听,实时显示。
- 自定义消息类型,json结构分为header和payload,header携带消息属性(包括消息id,消息类型,版本号),payload携带具体数据。