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

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

Go 语言中排序的 3 种方法

2023-08-18
阅读 2 分钟
1.1k
原文链接: Go 语言中排序的 3 种方法在写代码过程中,排序是经常会遇到的需求,本文会介绍三种常用的方法。废话不多说,下面正文开始。使用标准库根据场景直接使用标准库中的方法,比如:sort.Intssort.Float64ssort.Strings举个例子: {代码...} 自定义比较器使用 sort.Slice 方法排序时,可以自定义比较函数 less(i, ...

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

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

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

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

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

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

使用 RediSearch 在 Redis 中进行全文检索

2023-08-04
阅读 3 分钟
396
然而,Redis 在原生状态下并不支持全文检索功能,这使得处理文本数据变得相对困难。但是在有一些场景下还需要这样的功能,有什么好办法呢?答案就是 RediSearch。

使用 Go 语言实现二叉搜索树

2023-08-01
阅读 8 分钟
628
原文链接: 使用 Go 语言实现二叉搜索树二叉树是一种常见并且非常重要的数据结构,在很多项目中都能看到二叉树的身影。它有很多变种,比如红黑树,常被用作 std::map 和 std::set 的底层实现;B 树和 B+ 树,广泛应用于数据库系统中。本文要介绍的二叉搜索树用的也很多,比如在开源项目 go-zero 中,就被用来做路由管理...

Go 语言 select 都能做什么?

2023-07-28
阅读 2 分钟
473
原文链接: Go 语言 select 都能做什么?在 Go 语言中,select 是一个关键字,用于监听和 channel 有关的 IO 操作。通过 select 语句,我们可以同时监听多个 channel,并在其中任意一个 channel 就绪时进行相应的处理。本文将总结一下 select 语句的常见用法,以及在使用过程中的注意事项。基本语法select 语句的基本语...

Go 语言 context 都能做什么?

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

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

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

Go 语言 map 如何顺序读取?

2023-05-27
阅读 2 分钟
678
原文链接: Go 语言 map 如何顺序读取?Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。现象先看一段代码示例: {代码...} 当我们多执行几次这段代码时,就会发现,输出的顺序是不同的。原因首先,Go ...

Go 语言 map 是并发安全的吗?

2023-05-27
阅读 5 分钟
828
Go 语言中的 map 是一个非常常用的数据结构,它允许我们快速地存储和检索键值对。然而,在并发场景下使用 map 时,还是有一些问题需要注意的。

为什么 Go for-range 的 value 值地址每次都一样?

2023-04-30
阅读 2 分钟
1.4k
循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型。

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

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

Go 语言数组和切片的区别

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

Git Commit Message 应该怎么写?

2023-04-02
阅读 3 分钟
857
最近被同事吐槽了,说我代码提交说明写的太差。其实都不用他吐槽,我自己心里也非常清楚。毕竟很多时候犯懒,都是直接一个 -m "fix" 就提交上去了。

Go 语言 new 和 make 关键字的区别

2023-03-26
阅读 3 分钟
1.3k
本篇文章来介绍一道非常常见的面试题,到底有多常见呢?可能很多面试的开场白就是由此开始的。那就是 new 和 make 这两个内置函数的区别。

为什么 Go 语言 struct 要使用 tags

2023-03-11
阅读 5 分钟
1.1k
在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。

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

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

工作流引擎架构设计

2023-01-13
阅读 14 分钟
1.1k
最近开发的安全管理平台新增了很多工单申请流程需求,比如加白申请,开通申请等等。最开始的两个需求,为了方便,也没多想,就直接开发了对应的业务代码。

Git 分支管理策略汇总

2022-11-11
阅读 5 分钟
1.7k
我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的流程。所以查了一些资料,总结出下面这篇文章,一共包含四种常见的分支管理策略,分享给大家。
封面图

假如,程序员面试的时候说真话

2022-06-22
阅读 1 分钟
512
做程序员这么长时间了,经常能够听到一句话:面试造火箭,入职拧螺丝。而且,随着就业环境越来越卷,现在只会造火箭恐怕都不行了,得能造个空间站才行。

Linux 使用 cp 命令强制覆盖功能

2022-05-24
阅读 2 分钟
3k
我们平时在 Linux 中使用 cp 命令时,当把文件从一个目录复制到另一个目录,且目录中具有同名文件时,系统会提示输入 y 来确认是否覆盖同名文件。

这 BUG,绝了

2022-05-09
阅读 2 分钟
739
上周只上了三天班,但我也丝毫不敢懈怠,BUG 更是一个也没少写。看着满屏幕的 ERROR,我陷入沉思。为什么我写的代如此烂,无法像大牛们写的那般优雅?越想越自卑,越想越抑郁。我觉得这样不行,一定得振作起来。正如一位哲人曾经说过:世间万事万物,都是有两面性的:有它光明的一面,也就有他阴暗的一面;有它积极的一...

Django 如何获取 Model 字段列表?

2022-05-06
阅读 2 分钟
886
在平时的开发过程中,避免不了需要获取 Model 中的字段列表。那需要把所有字段都再复制一份吗?这样的话就太麻烦了,而且后期也不好维护。其实,Django 内置了一个方法,可以很轻松解决这个问题。下面以 User 表举一个例子。 {代码...} 通过 get_fields() 方法会返回一个 tuple,每个元素都是 model field 类型。这个结...

Django Model 如何返回空的 QuerySet

2022-05-05
阅读 1 分钟
826
技术博客: 硬核后端开发技术干货,内容包括 Python、Django、Docker、Go、Redis、ElasticSearch、Kafka、Linux 等。

Python 中删除列表元素的三种方法

2022-04-20
阅读 2 分钟
1.7k
L.remove(value) -> None -- remove first occurrence of value. Raises ValueError if the value is not present.

Python 报错 ValueError list.remove(x) x not in list 解决办法

2022-04-13
阅读 2 分钟
1.6k
平时开发 Python 代码过程中,经常会遇到这个报错: {代码...} 错误提示信息也很明确,就是移除的元素不在列表之中。比如: {代码...} 但还有一种情况也会引发这个错误,就是在循环中使用 remove 方法。举一个例子: {代码...} 输出结果和我们预期并不一致。如果是双层循环呢?会更复杂一些。再来看一个例子: {代码...}...

Python 中的鸭子类型和猴子补丁

2022-04-11
阅读 3 分钟
2.1k
Python 开发者可能都听说过鸭子类型和猴子补丁这两个词,即使没听过,也大概率写过相关的代码,只不过并不了解其背后的技术要点是这两个词而已。

Python 的排序方法 sort 和 sorted 的区别

2022-03-24
阅读 1 分钟
914
使用 sort() 或内建函数 sorted() 对列表进行排序。它们之间的区别有两点:sort() 方法是对原列表进行操作,而 sorted() 方法会返回一个新列表,不是在原来的基础上进行操作。sort() 是应用在列表上的方法,而 sorted() 可以对所有可迭代的对象进行排序操作。 {代码...} 以上就是本文的全部内容,如果觉得还不错的话,欢...