终于完成了php->go的转移工作
原型产品使用的 thinkphp+mysql+redis开发的 纯api,由于并发太大,php吃资源离谱。基于节约成本考虑,直接用go重写 。数据库 依旧是原来数据库。
总共30几个接口,历时一个月从零开始学习go并完成迁移工作。先重写大并发接口,而后逐个线上替换。
go主要用的库
|
|
jsonparser 是一个json处理库,比自带的encoding/json速度要快,但encoding/json更灵活一些,所以都使用了
fasthttp 是一个更加高性能的web服务,在多并发的时候 线程复用更强大
但是 依旧使用了 net/http 来处理一些 第三方sdk
感受和优势
1、vscode自带代码校验,大错误小错误都会提示,代码低级失误较少。代码自动格式化
2、不需要搭建环境,golang官方直接下载 安装即可,zip的话添加一个系统变量即可使用
3、可以不依赖nginx,当然基于ssl gzip 日志 等需求,前端还是套一个nginx 简单一些
4、编译速度很快,在vscode可以简单重新编译调试,4秒左右
5、直接导出二进制文件,不用担心源码泄露 尤其是源码里面的一些密码部分。比如md5的二次加密密钥等
6、计划任务 定时任务,可以直接单开一个线程处理,不依赖前台php文件唤起(当然 shell php也可以)go处理起来 很简单只需要一行 go cron_tab() //并发任务 即可
7、宝塔自带守护进程,不需要自己另外守护
8、fmt.Println fmt.Fprint(ctx, “{}”) 的日志输出,开发过程中监控运行状态更简单
9、跨平台 依旧有高性能,win linux mac arm均可以搞定
10、可以开发简单的 客户端软件。同语言 搞起来省心
11、包管理和源码文件 管理,没有php方便 ,需要用go mod 或者第三方框架
12、go和php相比,强类型需要时间适应,另外很多函数需要自己复写。go的异常处理 较为啰嗦,原生开发go的话,需要自己写大量简单的函数来封装 以便主流程代码简洁比如 md5 函数
|
|
还有 json和map互转 等等
13、字符类型转化 很啰嗦,甚至 int int8 int16 之间转化 代码啰嗦,不过按需使用 可以做到更快的运行速度和极限的更低的资源占用