框架 | Go框架中间件实现方式

为了更好的实现GoFast,我看了很多Golang的Web框架,包括比较流行的:Gin、Echo、iris、go-zero等。他们关于中间件的实现有很多相似的地方,但也有特色的地方,这里我们就重点分析一下他们的实现,顺便说说我的看法,最后介绍一下GoFast的实现。 Gin构造中间件数组 Gin框架是对每个路由节点单独构建一个中间件切片, ………

阅读全文

微服务002 | 限流算法

应用为什么要限流 由于 API 接口无法控制调用方的行为,因此当遇到瞬时请求量激增时,会导致接口占用过多服务器资源,使得其他请求响应速度降低或是超时,更有甚者可能导致服务器宕机。限流(Ratelimiting)指对应用服务的请求进行限制,例如某一接口的请求限制为 100 个每秒,对超过限制的请求则进行快速失败或丢弃。 限流可以应对: 热点 ………

阅读全文

Go随笔 | 如何解决包循环引用

golang为了加速编译,不允许包循环引用。一般只要你的包规划得好,严格规范单向调用链(如控制层 -> 业务层 -> 数据层),不会出现包循环引用问题。可是现实业务往往不会这么理想,同层级之间的不同包经常需要互相引用,下面分享几种解决包循环引用的方案。 方法一:抽象出公共接口包 方法二:提取出子包让其它包共同引用 方法三:提取 ………

阅读全文

Go随笔 | 协程为什么比线程轻量

Golang中GMP的介绍参考:/2020/12/27221039-008-gmp-model.html 操作系统会在物理处理器上调度线程来运行,而Go语言的运行时会在逻辑处理器P上调度goroutine来运行。每个逻辑处理器都分别绑定到单个操作系统线程M。在1.5版本以后,Go语言的运行时默认会为每个可用的物理处理器分配一个逻辑处理器。 ………

阅读全文

MySQL常见问题

mysqldump 1 2 3 # 备份单张表,同时启用gzip压缩 mysqldump -uroot -pdb191@b.x fund_trade account_share_logs | gzip > \ 191_dump_20210918_104401.fund_trade.account_share_logs.sql.gz ………

阅读全文

Oracle使用常见问题汇总

Oracle版本命名 Oracle 11G之后,发布的oracle版本有ORACLE 12C、ORACLE 18C、ORACLE 19C、ORACLE 21C,自oracle 12C之后,oracle发布的版本以年份作为发型版本号,由于2020年疫情,20C未发布。 ORACLE 12C R1 12.1.0.X ………

阅读全文

Go随笔 | 编译技巧

编译技巧 交叉编译 交叉编译主要是两个编译环境参数 $GOOS 和 $GOARCH 的设定。$GOOS代表编译的目标系统,$GOARCH代表编译的处理器体系结构。 $GOOS可选值如下: 1 2 3 4 5 6 7 8 9 darwin dragonfly freebsd linux netbsd openbsd plan9 ………

阅读全文

网络编程002 | Linux内核epoll原理学习

现代计算机系统叫做程序存储式计算机,抽象点说计算机系统就只有两种部件:CPU + IO设备,IO设备又分为内设和外设,内设指的就是内存、硬盘、网卡等,外设的种类就更多了,诸如鼠标键盘、移动硬盘、显示器等等都是。IO设备和CPU之间的数据交互都要通过操作系统来调度的, epoll就是Linux系统内核高效处理IO事件的一种实现,是Linux ………

阅读全文

Go总结(二十二)| panic异常处理

error和panic 错误 和 异常 是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。 但事实并非如此就好。众所周知,Golang 遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。 错误指 ………

阅读全文