Go





Golang 单元测试:有哪些误区和实践?
单元测试作为开发的有力武器,应该在软件开发的各个流程中发挥它的价值。原始的开发模式流程,应该逐步向 devops 的方向转变。本文是一个转型的具体实践过程,以一个实际的业务应用项目为例,介绍了在展开单测实践过程中遇到的一些常见问题的思考,并着重介绍了几种 mock 方法,对于一些相对复杂依赖项较多的业务也可以作为借鉴。
go-zero 之 rest 实战与原理
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,其中 rest 是 web 模块,该模块基于 Go 语言原生的 http 包进行构建,是一个高性能的,简单易用的 web 框架。使用 rest 能够快速构建 restful 风格 api 服务,同时具备服务监控和弹性服务治理能力

使用 Go 实现 Async/Await 模式
Golang 是一种并发编程语言。它具有强大的特性,如 Goroutines 和 Channels,可以很好地处理异步任务。另外,goroutines 不是 OS 线程,这就是为什么您可以在不增加开销的情况下根据需要启动任意数量的 goroutine 的原因,它的堆栈大小初始化时仅 2KB

go-zero 如何扛住流量冲击(二)
`go-zero` 中的 `tokenlimit` 限流方案适用于瞬时流量冲击,现实请求场景并不以恒定的速率。令牌桶相当预请求,当真实的请求到达不至于瞬间被打垮。当流量冲击到一定程度,则才会按照预定速率进行消费。

深入浅出 Go - sync.Map 源码分析
Go 的 map 在并发场景下,只读是线程安全的,读写则是线程不安全的。Go1.9 提供了并发安全的 sync.Map,通过阅读源码我们知道 snyc.Map 通过读写分离的机制,降低了锁的粒度,以此来提高并发性能


go-zero 如何扛住流量冲击(一)
不管是在单体服务中还是在微服务中,开发者为前端提供的 API 接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性。即接口也需要安装上保险丝,以防止非预期的请求对系统压力过大而引起的系统
熔断原理与实现 Golang 版
在微服务中服务间依赖非常常见,比如评论服务依赖审核服务而审核服务又依赖反垃圾服务,当评论服务调用审核服务时,审核服务又调用反垃圾服务,而这时反垃圾服务超时了,由于审核服务依赖反垃圾服务,反垃圾服务超时导致审核服务逻辑一直等待,而这个时候评论


Go 语言开源发布十一年,未来将重点支持 Go 模块和泛型
Go 语言发布十一周年了。回想 Go 语言的十周年庆典已经恍如隔世,2020 年是艰难的一年,但我们一直在推动 Go 的发展,也带来了不少值得回忆的美好瞬间。

Dubbo-go Server 端开启服务过程
导读:随着微服务架构的流行,许多高性能 rpc 框架应运而生,由阿里开源的 dubbo 框架 go 语言版本的 dubbo-go 也成为了众多开发者不错的选择。本文将介绍 dubbo-go 框架的基本使用方法,以及从 export 调用链的角度进行 server 端源码导读,希望能引导读者进

Go 发起 HTTP2.0 请求流程分析 (后篇)——标头压缩
在一个连接上,client 和 server 维护一个相同的 HPACK 索引列表,多个请求在发送和接收 Header 数据时可以分为两种情况


Go 发起 HTTP2.0 请求流程分析 (中篇)——数据帧 & 流控制
本篇主要分为三个部分:数据帧,流控制器以及通过分析源码逐步了解流控制。 本有意将这三个部分拆成三篇文章,但它们之间又有联系,所以最后依旧决定放在一篇文章里面。由于内容较多,笔者认为分三次分别阅读三个部分较佳。


Go 语言内存管理三部曲(二)解密栈内存管理
Go 应用程序运行时,每个 goroutine 都维护着一个自己的栈区,这个栈区只能自己使用不能被其他 goroutine 使用。栈区的初始大小是 2KB(比 x86_64 架构下线程的默认栈 2M 要小很多),在 goroutine 运行的时候栈区会按照需要增长和收缩

Go 语言内存管理三部曲(一)内存分配原理
现代高级编程语言管理内存的方式分为两种:自动和手动,像 C、C++ 等编程语言使用手动管理内存的方式,工程师编写代码过程中需要主动申请或者释放内存;而 PHP、Java 和 Go 等语言使用自动的内存管理系统,有内存分配器和垃圾收集器来代为分配和回收内存。

go-zero 流数据处理利器
流处理 (Stream processing) 是一种计算机编程范式,其允许给定一个数据序列 (流处理数据源),一系列数据操作 (函数) 被应用到流中的每个元素。同时流处理工具可以显著提高程序员的开发效率,允许他们编写有效、干净和简洁的代码。

