LYon's Blog

Gin Web 框架中 Middleware 的实现原理

7月 2, 2020
源码分析, Golang

Gin 和很多 Web 框架一样实现了 middleware(中间件)的功能,通过 Gin 提供的中间件,我们在业务逻辑处理每个请求之前进行一些通用的逻辑,比如身份校验、数据解密、签名认证、服务限流等功能。 使用方法 # 看起来很简单,只需要 r.Use() 你自定义的 middleware 就可以了。 func main() { // Creates a router without any … ...

Go 语言中 Goroutine 的并发数量控制

6月 19, 2020
Golang, 并发编程

虽然 Goroutine 号称占用的内存非常小,初始化只有几 K 大小,但是很多时候确实还是需要控制一台机器的 Goroutine 的并发数量,以进行业务上的可控并发场景的需要,或防止异常情况下的CPU、内存过载进而导致服务不可用的情况。 通过 Channel 控制 # 利用带缓冲区的 Channel 可以实现一个分发队列,队列里有值时就可以给 Goroutine 使用, … ...

Gin Web 框架中 Validate 使用总结

6月 7, 2020
Golang

在处理 HTTP 请求的时候,需要经常对请求的参数做 validate 验证,在 Django 框架里有 Serializer 里的 validate 方法来做校验,现在在 Go 语言的 Gin 框架下,也有类似的实现。Gin 使用了 go-playground/validator 来做校验,下面主要介绍下使用方法。 binding # 即绑定,validator 使用 binding … ...

Go 程序取消子 Goroutine 的几种方式

5月 21, 2020
Golang

Go 代码中如果有的 Goroutine 永远都不会退出,随着 Goroutine 的数量增长,内存泄露的风险也会变高。因此必须需要一种方法能够控制 Goroutine 的野蛮生长,在需要退出的场景下必须要主动退出。下面介绍几种方法来主动退出 Goroutine。 Context 方式 # Context 包 # Go 中的上下文 Context 包与 Goroutine 关系密切, … ...

使用 Typora 来编辑你的 Hugo 博客 R

4月 1, 2020
Tools, Recommended, Blog

最近 typroa 用的比较多,然后又想着继续维护在 github pages 的博客,觉得把 typora 编辑完的东西再复制到博客项目里很麻烦,于是开始了一番折腾。 目标是啥 # 在 typora 写的笔记放在了 iCloud,然后可以一键同步到我的线上博客 使用 hugo # hugo 是一个静态文件生成器,首先你需要用 hugo 自己生成一个项目 hugo new site … ...

Go 标准库中涉及 I/O 操作的几个包的区别

1月 15, 2020
Golang

工作中需要用 Go 读写一些 Excel 表等类型的文件,发现 Go 提供了很多关于 I/O 操作的包,比如 io、ioutil、bufio 等,于是在这里总结一下,主要目标是理清几个包之间在使用时如何选择。 io # io 库提供了底层的接口定义,还有一些常量,比如 io.EOF。最主要的,它定义了 io.Reader 、 io.Writer 和 io.Closer 等接口,在 Go 中很多方法 … ...

Redis 的分布式锁使用注意

1月 3, 2020
Database, 系统设计, Redis, 并发编程

为什么需要分布式锁 # 锁机制用于管理对共享资源的并发访问控制,当同一服务的多台机器间需要控制并发的时候,需要保证服务间在同一时间只能被一个线程访问。由于 Redis 的特点是单进程,并且具有高性能的特点,所以一般用 Redis 来做分布式锁。另外分布式锁还有以下几个特点: 互斥性:同一时刻只能有一个实例持有锁。 高可用:部分节点宕机不会影响其他节点对锁的使用。 防止死锁:如果客户端没有主动释放 … ...

学习钢琴半年的体会 R

12月 27, 2019
Life, Recommended, 杂谈

婚礼上为了给媳妇制造一个印象深刻的惊喜,我提前三个月去学了钢琴,现在回想起来也算是一件有意思的事情。6 月底报名后,经过和钢琴老师的讨论,对于我这种零基础短期想突击的,同时后期还想继续学下去的,最后老师推荐了我《月亮代表我的心》,尤其在老师弹了以后我自己也觉得这首曲子非常好。 于是我花了大约一个半月的时间打乐理基础,还有一个多月的时间专门学习这首曲子,在此之前我的乐理基础完全为零,从五线谱开始学。 … ...

Github Actions 实践总结

12月 1, 2019
DevOps, Tools

Github Actions 发布有一段时间了,自己用的也挺嗨,过来总结一下。我主要在两个地方用到了,一个是博客,另一个是打包、发布前端项目。整体功能上 Actions 和 GitLab CI/CD 差不多,同样实现了项目的自动化测试、打包、部署,不过 Actions 利用了 GitHub 开源项目平台的特点,提供了 Marketplace,可以直接复用其他作者的 Action。 GitHub … ...

Redis 实现布隆过滤器

11月 12, 2019
Database, 系统设计, 数据结构, Redis

布隆过滤器(Bloom Filter,BF),能够确定一个东西一定不存在或可能存在,常用于在海量并发情况下防止缓存击穿,相比较传统的 List、Set、Map 数据结构,布隆过滤器能够在大数据量的情况下,相比其他结构更能节省大量的内存空间。 实现原理 # 哈希函数 # 布隆过滤器实现了 K 个不同的哈希函数,假设初始的二进制数组长度为 N,K 对 N 取模,就得到了 K 个位置,当加入一个变量时, … ...


© 2012 - 2025 YINDONGLIANG