权限系统通用的设计模型
10月 29, 2020
权限系统是一个比较通用的系统,几乎所有的后台业务都会涉及到,关于权限系统的设计经过一些最佳实践也已经被总结成各种模型,比如 ACL、RBAC、ABAC、PBAC等,下面开始详细介绍。 基本概念# 在很多权限系统的框架和服务,包括 Casbin、Authing 里面,都有下面这些名词作为基础,所以在开始之前,还要先理解这些概念。 主体(Subject)# 想要访问资源的主体,可以先理解为用户。 对 …
了解下 Protobuf 相关概念
9月 22, 2020
说 Protobuf 之前,要先知道 RPC 是什么,可以说 Protobuf 是实现 RPC 的接口描述语言。 RPC# RPC,全称 Remote Procedure Call,中文叫远程过程调用。 go 语言基于标准库实现了一套自己的 RPC 调用规则:方法只能有两个可序列化的参数,其中第二个参数是指针类型,并且返回一个error类型,同时必须是公开的方法1。 Only methods …
乒乓理财,了解一下? R
7月 25, 2020
谁需要看# 如果你有100 万要理财,这个不适合你。如果你只有 1 万?那向你介绍一下我总结的理财方案~ 认识乒乓球拍# 关于球拍的分类,我从各个角度出发整理了一个图: 可见,正是球拍的种类非常之多,每种特性组合在一起,会发生各种各样的效果,这也是为什么球友们对器材津津乐道、各种尝试的原因,也是乒乓球拍多样性表现,况且现在还没有介绍胶皮的多样性。 案例分析# 张继科和vis# …
Panic:assignment to entry in nil map
7月 23, 2020
参考以下代码,运行时会报 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 …
Kafka 和 RabbitMQ 对比 R
7月 11, 2020
消息队列中间件(Message Queue Middleware,简称 MQ)在后端领域扮演很重要的角色,但是笔者之前日常多止步于使用,对机制原理研究很少。之前用 Python 写 Web 服务的时候,用到 RabbitMQ 的情况比较多,可能是因为有一个基于 Python 的消息队列的封装库 Celery 非常好用。后来写 Go 服务的时候,接入了公司整体的技术架构,Kafka 又用的比较多。这 …
Gin Web 框架中 Middleware 的实现原理
7月 2, 2020
Gin 和很多 Web 框架一样实现了 middleware(中间件)的功能,通过 Gin 提供的中间件,我们在业务逻辑处理每个请求之前进行一些通用的逻辑,比如身份校验、数据解密、签名认证、服务限流等功能。 使用方法# 看起来很简单,只需要 r.Use() 你自定义的 middleware 就可以了。 func main() { // Creates a router without any …
Go 语言中 Goroutine 的并发数量控制
6月 19, 2020
虽然 Goroutine 号称占用的内存非常小,初始化只有几 K 大小,但是很多时候确实还是需要控制一台机器的 Goroutine 的并发数量,以进行业务上的可控并发场景的需要,或防止异常情况下的CPU、内存过载进而导致服务不可用的情况。 通过 Channel 控制# 利用带缓冲区的 Channel 可以实现一个分发队列,队列里有值时就可以给 Goroutine 使用,没有值时 Goroutine …
Gin Web 框架中 Validate 使用总结
6月 7, 2020
在处理 HTTP 请求的时候,需要经常对请求的参数做 validate 验证,在 Django 框架里有 Serializer 里的 validate 方法来做校验,现在在 Go 语言的 Gin 框架下,也有类似的实现。Gin 使用了 go-playground/validator 来做校验,下面主要介绍下使用方法。 binding# 即绑定,validator 使用 binding …
Go 程序取消子 Goroutine 的几种方式
5月 21, 2020
Go 代码中如果有的 Goroutine 永远都不会退出,随着 Goroutine 的数量增长,内存泄露的风险也会变高。因此必须需要一种方法能够控制 Goroutine 的野蛮生长,在需要退出的场景下必须要主动退出。下面介绍几种方法来主动退出 Goroutine。 Context 方式# Context 包# Go 中的上下文 Context 包与 Goroutine 关系密切, …
使用 Typora 来编辑你的 Hugo 博客 R
4月 1, 2020
最近 typroa 用的比较多,然后又想着继续维护在 github pages 的博客,觉得把 typora 编辑完的东西再复制到博客项目里很麻烦,于是开始了一番折腾。 目标是啥# 在 typora 写的笔记放在了 iCloud,然后可以一键同步到我的线上博客 使用 hugo# hugo 是一个静态文件生成器,首先你需要用 hugo 自己生成一个项目 hugo new site …