微服务架构|go-zero 的自适应熔断器

2023-09-02
阅读 10 分钟
1.8k
在一条调用链上,如果发现某个服务异常,比如响应超时。那么调用者为了避免过多请求导致资源消耗过大,最终引发系统雪崩,会直接返回错误,而不是疯狂调用这个服务。

go-zero 是如何实现令牌桶限流的?

2023-08-10
阅读 6 分钟
859
原文链接: go-zero 是如何实现令牌桶限流的?上一篇文章介绍了 如何实现计数器限流?主要有两种实现方式,分别是固定窗口和滑动窗口,并且分析了 go-zero 采用固定窗口方式实现的源码。但是采用固定窗口实现的限流器会有两个问题:会出现请求量超出限制值两倍的情况无法很好处理流量突增问题这篇文章来介绍一下令牌桶算...

go-zero 是如何实现计数器限流的?

2023-08-09
阅读 4 分钟
947
在微服务架构中,一个服务可能需要频繁地与其他服务交互,而过多的请求可能导致性能下降或系统崩溃。为了确保系统的稳定性和高可用性,限流算法应运而生。

go-zero 是如何做路由管理的?

2023-08-09
阅读 5 分钟
907
原文链接: go-zero 是如何做路由管理的?go-zero 是一个微服务框架,包含了 web 和 rpc 两大部分。而对于 web 框架来说,路由管理是必不可少的一部分,那么本文就来探讨一下 go-zero 的路由管理是怎么做的,具体采用了哪种技术方案。路由管理方案路由管理方案有很多种,具体应该如何选择,应该根据使用场景,以及实现的...

Go 语言 context 都能做什么?

2023-07-02
阅读 6 分钟
1.3k
原文链接: Go 语言 context 都能做什么?很多 Go 项目的源码,在读的过程中会发现一个很常见的参数 ctx,而且基本都是作为函数的第一个参数。为什么要这么写呢?这个参数到底有什么用呢?带着这样的疑问,我研究了这个参数背后的故事。开局一张图:核心是 Context 接口: {代码...} 包含四个方法:Done():返回一个 cha...

为什么说 Go 语言字符串是不可变的?

2023-06-02
阅读 1 分钟
925
原文链接: 为什么说 Go 语言字符串是不可变的?最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢?这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。首先来看看它的底层结构: {代码...} 和切片的结构很像,只不过少了一...

Go 语言切片是如何扩容的?

2023-04-09
阅读 7 分钟
1.6k
原文链接: Go 语言切片是如何扩容的?在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一种引用类型,它有三个属性:指针,长度和容量。底层源码定义如下: {代码...} 指针: 指向 slice 可...

Go 语言数组和切片的区别

2023-04-02
阅读 3 分钟
1.5k
原文链接: Go 语言数组和切片的区别在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。另外,这个问题在面试中也经常会被问到,属于入门级题目,看过文章之后,相信你会有一个很好的答案。数组数组是同一种数据类型元素的集合,数组在定义时需要指定长度和元素...

为什么 Go 不支持 []T 转换为 []interface

2023-01-30
阅读 6 分钟
1.9k
在 Go 中,如果 interface{} 作为函数参数的话,是可以传任意参数的,然后通过类型断言来转换。举个例子: {代码...} 不管是传 int 还是 string,最终都能输出正确结果。那么,既然是这样的话,我就有一个疑问了,拿出我举一反三的能力。是否可以将 []T 转换为 []interface 呢?比如下面这段代码: {代码...} 很遗憾,这...

读 Go 源码,可以试试这个工具

2022-02-08
阅读 2 分钟
3.3k
原文链接: 读 Go 源码,可以试试这个工具编程发展至今,从面向过程到面向对象,再到现在的面向框架。写代码变成了一件越来越容易的事情。学习基础语法,看看框架文档,几天时间搞出一个小项目并不是一件很难的事情。但时间长了就会发现,一直这样飘在表面是不行的,技术永远得不到提升。想要技术水平有一个质的飞跃,有...

为什么要避免在 Go 中使用 ioutil.ReadAll?

2022-01-06
阅读 6 分钟
11.1k
原文链接: 为什么要避免在 Go 中使用 ioutil.ReadAll?ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾。在 GitHub 上搜索 ioutil.ReadAll,类型选择 Code,语言选择 Go,一共得到了 637307 条结果。这说明 ioutil.ReadAll 还是挺受欢迎的,主要也是用起来确实方便。但是当遇到大文件时,这个函...

如何在 GitHub 上高效阅读源码?

2021-12-20
阅读 2 分钟
2.9k
原文链接: 如何在 GitHub 上高效阅读源码?之前听说过一个故事,一个领导为了提高团队战斗力,把团队成员集中起来,搞封闭开发,重点还是在没有网的条件下。结果就是一个月过去了,产出基本为零。我发现,如果没有网,程序员基本上是写不出代码了。现在做什么功能之前,先到网上搜搜看,然后直接复制粘贴搞定。最实用的...

开始读 Go 源码了

2021-12-03
阅读 3 分钟
2.5k
在写项目的过程中,发现一个问题。实现功能是没问题的,但不知道自己写的代码是不是符合 Go 的风格,是不是够优雅。所以我觉得相比于继续学习应用开发,不如向底层前进,打好基础,打好写 Go 代码的基础。