Lei Xia

Sr. Software Engineer | Solution Architect

抒写代码,尽享生活,筑就未来。

订阅 · 赞赏

avatar

在事务中使用闭包函数简化开发

2019年5月14日 · 80 字 · 1 分钟

闭包函数 PHP官方文档对于闭包函数的定义: 匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

使用systemd来构建你的服务

2019年2月28日 · 278 字 · 2 分钟

systemd是什么 Systemd 服务是一种以 .service 结尾的单元(unit)配置文件,用于控制由Systemd 控制或监视的进程。简单说,用于后台以守护精灵(daemon)的形式运行程序。

c语言实现简单版的php z_val结构体

2019年2月26日 · 227 字 · 2 分钟

源码 学习过PHP的人都知道PHP是基于C语言开发的,但是C语言是强类型的,PHP如何实现弱类型呢?答案在于这个 typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; zend_ast *ast; } zvalue_value; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; type保存了实际的类型,而value这个共用体保存了具体的值,我们使用到变量的时候需要根据变量类型来取出**_zvalue_value中保存的具体值。 采用union能够避免内存浪费,同一时刻,一个_zval_struct中的共用体zvalue_value**只有一个成员会分配内存,避免了无谓的内存分配。

无需编程导出微信表情包

2019年1月11日 · 14 字 · 1 分钟

微信前两天推送了年度报告,其中的表情统计很有意思,的确,表情包这两年是越来越火了。但是有个问题是微信不支持导出表情包,有的小伙伴又需要导出来保存到其他地方。 本文分享一个比较简单的方式导出表情包,条件只有一个:谷歌浏览器。 打开 https://wx.qq.com 并登陆,这是网页版微信登录入口 手机选择表情发送给文件传输助手 打开网页版微信,可以查看到图片 接下来打开谷歌浏览器的开发者工具(不同电脑不太一样,但是都是右上角打开) 然后按照图片顺序点击如下图所示的图标 这时候鼠标处于选择元素的状态,直接悬浮在表情图片上即可 下方的窗口会出现图片链接,而且会有背景色(本图片的背景色是淡蓝色) 鼠标悬浮到刚才的淡蓝色窗口的链接上面,会出现表情的原图 在链接上面点击右键,选择如图名字的菜单(菜单顺序不同系统不同) 在新窗口打开的图片就是表情原始图片了,可以保存

一起学context(二)——超时控制

2019年1月2日 · 92 字 · 1 分钟

上一篇文章讲到如何使用context来传值,实际上context还有另外一个重要功能——goroutine的超时控制。 很多时候goroutine如果不设超时,一旦发生阻塞将无限等待,协程数会越来越多,导致耗尽服务器内存。 分类 拥有超时控制的context有以下几种: context.WithTimeout(parent Context, timeout time.

一起学context(一)——上下文值传递

2018年10月17日 · 126 字 · 1 分钟

系列开篇 本文开始将针对context的用法进行系统化讨论,在这里你将能够在工作中合理使用context解决一些比较棘手的问题。 context处理超时处理之外还可以用来保存数据,当你需要在多个上下文传递时传递数据,那么本文提到的知识可以排上用场。 示例代码 示例代码为一个简单的http服务,流程是登录之后会跳转首页,首页通过guard中间件进行鉴权。当然,示例代码未做其他诸如连接数据库之类的处理,这不是本文的重点。 守卫函数读取cookie之后将cookie值写入context并向下传递,在整个请求中可以说是“透明”的。当访问到需要保护的接口时检测到没有提供cookie,则直接终端请求,否则通过r.

io.Reader游标引发的血案

2018年10月17日 · 173 字 · 1 分钟

#背景 线上运行了一个图片合成程序,默认的小程序二维码中奖是小程序LOGO,不满足需求,所以将微信小程序二维码和用户头像合成在一张图片。 由于微信图片有时候返回的Content-Type不对应(比如内容是PNG的,头确是image/jpeg)所以使用jpeg/png/gif的顺序进行图片数据解析,哪个成功就返回解析结果。 #问题 总是出现诸如invalid JPEG format: missing SOI marker #解决过程 我去查看jpeg.

golang40行代码实现通用协程池

2018年8月8日 · 144 字 · 1 分钟

代码仓库 goroutine-pool golang 的协程管理 golang 协程机制很方便的解决了并发编程的问题,但是协程并不是没有开销的,所以也需要适当限制一下数量。

golang不到30行代码实现依赖注入

2018年7月24日 · 467 字 · 3 分钟

项目地址 go-di-demo 本项目依赖 使用标准库实现,无额外依赖 依赖注入的优势 用java的人对于spring框架一定不会陌生,spring核心就是一个IoC(控制反转/依赖注入)容器,带来一个很大的优势是解耦。一般只依赖容器,而不依赖具体的类,当你的类有修改时,最多需要改动一下容器相关代码,业务代码并不受影响。

不到20行代码实现golang路由调度

2018年7月23日 · 205 字 · 1 分钟

项目地址 go-dispatcher 本项目依赖 使用标准库实现,无额外依赖 为什么需要路由调度层 golang http标准库只能精确匹配请求的URI,然后执行handler。现在一般web项目都至少有个Controller层,以struct实现,根据不同的请求路径派发到不同的方法中去。