殷东亮的博客

了解下 Protobuf 相关概念

9月 22, 2020
Go, HTTP, 计算机网络, 系统设计

说 Protobuf 之前,要先知道 RPC 是什么,可以说 Protobuf 是实现 RPC 的接口描述语言。 RPC # RPC,全称 Remote Procedure Call,中文叫远程过程调用。 go 语言基于标准库实现了一套自己的 RPC 调用规则:方法只能有两个可序列化的参数,其中第二个参数是 ...

乒乓理财,了解一下? Recommended

7月 25, 2020
Life, Recommended

谁需要看 # 如果你有100 万要理财,这个不适合你。如果你只有 1 万?那向你介绍一下我总结的理财方案~ 认识乒乓球拍 # 关于球拍的分类,我从各个角度出发整理了一个图: 可见,正是球拍的种类非常之多,每种特性组合在 ...

Panic:assignment to entry in nil map

7月 23, 2020
Go

参考以下代码,运行时会报 panic: assignment to entry in nil map。 package main import "fmt" func main() { var m map[string]int m["a"] = 1 fmt.Println(m["a"]) } //panic: assignment to entry in nil map 查了一下原因,发现是通过 var m map[string]int 得到的值是 nil, 不指向任何内存地址。需要通过 make 方法才可以分配确定的内存地址。 这个问题官 ...

Kafka 和 RabbitMQ 对比 Recommended

7月 11, 2020
Database, Recommended, 系统设计

消息队列中间件(Message Queue Middleware,简称 MQ)在后端领域扮演很重要的角色,但是笔者之前日常多止步于使用,对机制原理研究很少。之前用 Python 写 Web 服务的时候,用到 RabbitMQ 的情况比较多,可能是因为有一 ...

Gin Web 框架中 Middleware 的实现原理

7月 2, 2020
Go, 源码分析

Gin 和很多 Web 框架一样实现了 middleware(中间件)的功能,通过 Gin 提供的中间件,我们在业务逻辑处理每个请求之前进行一些通用的逻辑,比如身份校验、数据解密、签名认证、服务限流等功能。 使用方法 # 看起来很 ...

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

6月 19, 2020
Go

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

Gin Web 框架中 Validate 使用总结

6月 7, 2020
Go

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

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

5月 21, 2020
Go

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

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

4月 1, 2020
Tools, Recommended

最近 typroa 用的比较多,然后又想着继续维护在 github pages 的博客,觉得把 typora 编辑完的东西再复制到博客项目里很麻烦,于是开始了一番折腾。 目标是啥 # 在 typora 写的笔记放在了 iCloud,然后可以一键同步到我的线上博客 使用 hugo # hugo 是 ...

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

1月 15, 2020
Go

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


© 2012-2024 YINDONGLIANG.COM