原文链接: 如何实现计数器限流?
上一篇文章 go-zero 是如何做路由管理的? 介绍了路由管理,这篇文章来说说限流,主要介绍计数器限流算法,具体的代码实现,我们还是来分析微服务框架 go-zero 的源码。
在微服务架构中,一个服务可能需要频繁地与其他服务交互,而过多的请求可能导致性能下降或系
原文链接:
上一篇文章介绍了 如何实现计数器限流?主要有两种实现方式,分别是固定窗口和滑动窗口,并且分析了 go-zero 采用固定窗口方式实现的源码。
但是采用固定窗口实现的限流器会有两个问题:
会出现请求量超出限制值两倍的情况
无法很好处理流量突增问题
这篇文章来介绍一下令牌桶算法,可以很好
Go语言的泛型是在Go 1.18版本中引入的一个新特性,它允许开发者编写可以处理不同数据类型的代码,而无需为每种数据类型都编写重复的代码。以下是关于Go语言泛型的一些关键点:
泛型是通过在函数或类型定义中使用类型参数来实现的。类型参数可以被看作是一个特殊的类型,它可以在函数或类型定义中的任何位置使
经过了半年左右的开发,golang 1.21 在今天早上正式发布了。
这个版本中有不少重要的新特性和变更,尤其是在泛型相关的代码上。
因为有不少大变动,所以建议等第一个patch版本也就是1.21.1出来之后再进行升级,以免遇到一些意外的bug带来麻烦。
好了,一起来看看1.21带来的新特性吧。
原文链接: go-zero 是如何做路由管理的?
go-zero 是一个微服务框架,包含了 web 和 rpc 两大部分。
而对于 web 框架来说,路由管理是必不可少的一部分,那么本文就来探讨一下 go-zero 的路由管理是怎么做的,具体采用了哪种技术方案。
路由管理方案
路由管理方案有很多种
在Go中,有不同的变量类型,例如:
int 存储整数(整数),例如123或-123
float32 存储浮点数字,带小数,例如19.99或-19.99
string - 存储文本,例如“ Hello World”。字符串值用双引号括起来
bool 存储具有两个状态的值:true或false
声明(
前言
假设一个场景,服务端部署在内网,客户端需要通过暴露在公网的nginx与服务端进行通信。为了避免在公网进行 http 明文通信造成的信息泄露,nginx与客户端之间的通信应当使用 https 协议,并且nginx也要验证客户端的身份,也就是mTLS双向加密认证通信。
这条通信链路有三个角色:服
概述
在任何语言中函数都是极其重要的内容,业务功能都是由一个或多个函数组合完成。go语言是函数式编程语言,函数是一等公民,可以被传递、有函数类型,go语言有三种类型的函数,普通函数、匿名函数(Lambda函数)、方法函数。go语言函数有独特属性,可以有多个返回值,需要使用多个变量接收、函数也是一
前言
一个程序就是一个世界,不论是使用哪种高级程序语言编写程序, 变量都是其程序的基本组成单位,
变量
在 go 中 变量是用于存储数据的命名空间(内存位置),它可以表示一个值,这个值在程序执行过程中可能会发生改变。
+-------------+ +-----------------
注释是在执行时被忽略的文本。
注释可用于解释代码,使其更易读。
注释还可用于在测试替代代码时防止代码执行。
Go支持单行或多行注释。
Go单行注释
单行注释以两个正斜杠(//)开头。
在//和行尾之间的任何文本都将被编译器忽略(不会被执行)。
示例
// This is a comment
pac
写这篇文章的时候,已经离我找工作有一段时间了,但是觉得这道题不管是面试还是日常的工作中,都会经常遇到,所以还是特意写一篇文章,记录下自己对Golang中==的理解。如文章中出现不对的地方,请不吝赐教,谢谢。
注意,以下文章内容是基于 go1.16.4 进行演示的,如果和你验证时,结果不一致,可能
如何在Go中使用Makefile
1.Makefile是什么
Makefile是一种构建工具,用于在项目中定义和执行一系列命令。它通常包含了一些规则和目标,用于编译、测试、运行和清理项目。
2.Makefile可以用于哪些语言的构建过程
Makefile最初是为了 C程序的构建而设计的,但由于其
一个 Go 文件包含以下几个部分:
包声明
导入包
函数
语句和表达式
看下面的代码,更好地理解它:
例子
package main
import "fmt"
func main() { fmt.Println("Hello World!") }
例子解释
第 1 行: 在 Go 中,每个程
什么是Go?
Go是一个跨平台、开源的编程语言
Go可用于创建高性能应用程序
Go是一种快速、静态类型、编译型语言,感觉上像动态类型、解释型语言
Go由Robert Griesemer、Rob Pike和Ken Thompson于2007年在Google开发
Go的语法类似于C ++
Go用于什么
Go 语言入门指南: 环境搭建、基础语法和常用特性解析 | 青训营
从零开始
Go 语言简介
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ia
一、概述
接口是面向对象编程的重要概念,接口是对行为的抽象和概括,在主流面向对象语言Java、C++,接口和类之间有明确关系,称为“实现接口”。这种关系一般会以“类派生图”的方式进行,经常可以看到大型软件极为复杂的派生树,随着系统的功能不断增加,这棵“派生树”会变得越来越复杂。
Go语言接口模型
概述
方法是面向对象编程 (OOP) 的一个特性,在 C++/Java 语言中方法是类函数,go做为函数式编程语言,通过特有技能支持相似的功能,所以说go也支持面向对象编程特性。
go 方法本质也是函数,相比普通函数稍有区别,方法必须与具体类型绑定,且无法独立运行,只能通过类型实例执行,函数是一
前言
假设gRPC服务端的主机名为qw.er.com,需要为gRPC服务端和客户端之间的通信配置tls双向认证加密。
生成证书
生成ca根证书。生成过程会要求填写密码、CN、ON、OU等信息,记住密码。
openssl req -x509 -newkey rsa:4096 -keyout ca.k
在 Protocol Buffers (protobuf) 中,可以使用特定的选项来指定生成的 JSON 标签。通过在消息定义中使用 [(json_name)] 选项,可以控制生成的 JSON 字段名称。这样可以确保 Protocol Buffers 和 JSON 之间的互操作性。
下面是一个示例
原文链接: 使用 Go 语言实现二叉搜索树
二叉树是一种常见并且非常重要的数据结构,在很多项目中都能看到二叉树的身影。
它有很多变种,比如红黑树,常被用作 std::map 和 std::set 的底层实现;B 树和 B+ 树,广泛应用于数据库系统中。
本文要介绍的二叉搜索树用的也很多,比如在开源