跳至正文
LYon's Blog

Go 语言的 MPG 并发调度模型

Golang 的高并发能力是通过协程 goroutine 实现的,在 Go 语言的开发中,每涉及到 goroutine 的相关功能实现时,都会意识到自己需要对 MPG 的模型有一个大概的了解,在此基础上才能做好开发上的决策,本篇也即为 MPG 并发调度模型的学习笔记了。 进程、线程和协程 要对 goroutine 的调度器深入了解,需要先了解一下进程、线程的基础知识。 进程 进程作为拥有资源分配的 …

Go 语言的 Context 源码分析

研究 Context 的源码,有助于对结合运用 interface 和 struct 的理解,以及对其他三方框架对 Context 接口的重新实现也能有一定认识,在实际开发中更是非常有帮助。Context 的源码非常短小,加上大概一半的注释整个文件也才 500 行,500 行就可以和面试官扯一个小时,ROI 巨大,确定不研究下么。 必备知识 WithTimeout 使用 go func main( …

Go 语言中 Channel 的实现

关于 Go 并发设计的哲学中,最常见的一句话就是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存 1 。Go 语言采用 CSP(Communicating sequential processes)并发模型,底层运用 Channel 实现其特性,如果不对 Channel 有一番了解,也就很难真正掌握 Go 语言独特的并发技术。 使用方法 先复习下 Channel 的使用方法。 定义 …

权限系统通用的设计模型

权限系统是一个比较通用的系统,几乎所有的后台业务都会涉及到,关于权限系统的设计经过一些最佳实践也已经被总结成各种模型,比如 ACL、RBAC、ABAC、PBAC等,下面开始详细介绍。 基本概念 在很多权限系统的框架和服务,包括 Casbin 、 Authing 里面,都有下面这些名词作为基础,所以在开始之前,还要先理解这些概念。 主体(Subject) 想要访问资源的主体,可以先理解为用户。 对象 …

代码规范Doc

语言规范 控制 Goroutine 的生命周期 使用 gofmt Context 一般作为第一个参数传参 copy struct 时需注意 slice 的拷贝 Don’t Panic pkg 里面的包最好有 example 传值还是传指针? Error 未处理 Share memory by communicating; don’t communicate by sharing memory. 在 …

了解下 Protobuf 相关概念

说 Protobuf 之前,要先知道 RPC 是什么,可以说 Protobuf 是实现 RPC 的接口描述语言。 RPC RPC,全称 Remote Procedure Call,中文叫远程过程调用。 go 语言基于标准库实现了一套自己的 RPC 调用规则:方法只能有两个可序列化的参数,其中第二个参数是指针类型,并且返回一个error类型,同时必须是公开的方法 1 。 Only methods t …

乒乓理财,了解一下?R

谁需要看 如果你有100 万要理财,这个不适合你。如果你只有 1 万?那向你介绍一下我总结的理财方案~ 认识乒乓球拍 关于球拍的分类,我从各个角度出发整理了一个图: 可见,正是球拍的种类非常之多,每种特性组合在一起,会发生各种各样的效果,这也是为什么球友们对器材津津乐道、各种尝试的原因,也是乒乓球拍多样性表现,况且现在还没有介绍胶皮的多样性。 案例分析 张继科和vis 先说蝴蝶 Viscaria …

Panic:assignment to entry in nil map

参考以下代码,运行时会报 panic: assignment to entry in nil map。 go 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 查了一下原因,发现是通 …

Kafka 和 RabbitMQ 对比R

消息队列中间件(Message Queue Middleware,简称 MQ)在后端领域扮演很重要的角色,但是笔者之前日常多止步于使用,对机制原理研究很少。之前用 Python 写 Web 服务的时候,用到 RabbitMQ 的情况比较多,可能是因为有一个基于 Python 的消息队列的封装库 Celery 非常好用。后来写 Go 服务的时候,接入了公司整体的技术架构,Kafka 又用的比较多。这 …

Gin Web 框架中 Middleware 的实现原理

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


© 2012 - 2025 YINDONGLIANG
博客助手

正在打开博客助手…