最近在用 LemonSqueezy(lemonsqueezy.com) 做 side project 的收款服务,需要用到 webhook 来处理用户付款后的自动发货流程。

项目后端用的是 Go 语言,gin 框架,截止项目启动的时,没能在 GitHub 上找到 LemonSqueezy 的 webhook SDK,于是就徒手写了个,用了一段时间之后把代码整理了一下开源了。

因为 gin + lemon,于是就取名叫 gin and tonic 了😆

如果刚好你也在用 gin 框架,那么这个库你可以开箱即用:

Gin&Tonic

项目地址:https://github.com/YianAndCode/gintonic

最后祝大家财源滚滚,It's lemon squeezy to make money!

写过 CLI 常驻进程的老司机肯定遇到过这么一个问题:在需要更新程序的时候,我要怎样才能安全关闭老进程?你可能会想到 NGINXphp-fpm 之类的平滑重启是给进程发送 USR2 信号,然后它就会将当前请求处理完再退出。

但进程是怎样接收信号、处理信号,估计就不是很多人能说清楚了。

- 阅读剩余部分 -

写 PHP CLI 程序的老司机们可能经常会写一些常驻进程,比如消息队列消费者进程,这些进程会一直运行,除非要发版,不然一般不会重启的,所以程序程序是不可能由我们通过 ssh 登录到服务器上通过终端来直接启动的(因为一旦断开 ssh 进程就退出了),常见的做法就是用 systemd 或者 supervisor 来使其成为 守护进程,这样进程就可以一直运行,遇到错误意外退出也能被自动重启。

好学的你可能会思考守护进程到底是怎么实现的?为什么有的程序既可以自己就成为守护进程,又可以通过 systemd 来后台运行?如果不依赖外部,我们的 PHP 程序该怎样变成守护进程呢?

- 阅读剩余部分 -

int*int 说起

int**是什么” 这个问题其实不难。
我们可以递归分析,先看下 int*是什么,嗯?好像还可以继续递归到 int
我们都知道,int是 C 的基础数据类型 整型,而多了个 *int*指向整型变量的指针,那么 int** 是什么就不言自明了,列个表:

C语法释义
int整型
int*指向整型的指针
int**指向指向整型的指针的指针

看到这里,你对 int** 应该有了个初步的认识,但你可能觉得有点绕,没关系,下面我们写一段代码看看:

- 阅读剩余部分 -