月报 | 2024.10 期
受 Juniper Photon 的启发,决定从这个月开始,每月写一篇总结,主要记录分享下过去一个月(2024.10.19~11.18)的产出和思考
过去一个月算是一个比较松弛的状态,全国各地跑了好几个城市,跟几个朋友聊了下近况和准备的事情,也趁着闲暇时间梳理了下之前的一些烂尾项目,把该还的技术债还一还。
受 Juniper Photon 的启发,决定从这个月开始,每月写一篇总结,主要记录分享下过去一个月(2024.10.19~11.18)的产出和思考
过去一个月算是一个比较松弛的状态,全国各地跑了好几个城市,跟几个朋友聊了下近况和准备的事情,也趁着闲暇时间梳理了下之前的一些烂尾项目,把该还的技术债还一还。
最近在用 LemonSqueezy(lemonsqueezy.com) 做 side project 的收款服务,需要用到 webhook 来处理用户付款后的自动发货流程。
项目后端用的是 Go 语言,gin
框架,截止项目启动的时,没能在 GitHub 上找到 LemonSqueezy 的 webhook SDK,于是就徒手写了个,用了一段时间之后把代码整理了一下开源了。
因为 gin
+ lemon
,于是就取名叫 gin and tonic
了😆
如果刚好你也在用 gin
框架,那么这个库你可以开箱即用:
项目地址:https://github.com/YianAndCode/gintonic
最后祝大家财源滚滚,It's lemon squeezy to make money!
写过 CLI 常驻进程的老司机肯定遇到过这么一个问题:在需要更新程序的时候,我要怎样才能安全关闭老进程?你可能会想到 NGINX
、php-fpm
之类的平滑重启是给进程发送 USR2
信号,然后它就会将当前请求处理完再退出。
但进程是怎样接收信号、处理信号,估计就不是很多人能说清楚了。
写 PHP CLI 程序的老司机们可能经常会写一些常驻进程,比如消息队列消费者进程,这些进程会一直运行,除非要发版,不然一般不会重启的,所以程序程序是不可能由我们通过 ssh 登录到服务器上通过终端来直接启动的(因为一旦断开 ssh 进程就退出了),常见的做法就是用 systemd
或者 supervisor
来使其成为 守护进程
,这样进程就可以一直运行,遇到错误意外退出也能被自动重启。
好学的你可能会思考守护进程到底是怎么实现的?为什么有的程序既可以自己就成为守护进程,又可以通过 systemd
来后台运行?如果不依赖外部,我们的 PHP 程序该怎样变成守护进程呢?
众所周知,Go struct 定义方法时使用指针还是值的区别就是在方法内修改属性值时,用值定义的方法所做的修改只限于方法内,而指针则没有这个局限。
文章如果到这里就结束了,那么就很平平无奇了,于是我打算带大家去做个无聊但是值得思考的实验。