反射(reflection)是 Go 在运行时检查、修改自身结构的能力。它让程序可以脱离编译期已知的具体类型,动态地读取字段、调用方法、构造实例。
泛型(Generics)是 Go 语言发展史上最重要的一次语法扩展。从 2009 年开源到 2022 年 Go 1.18 正式落地,社区对泛型的讨论整整持续了十三年。它让我们终于可
内存管理是理解 Go 运行时的最后一块拼图,也是面试中区分"会用"与"懂原理"的分水岭。Go 把 C/C++ 里让人头疼
1. 性能分析概述 性能优化是每个后端工程师绕不开的话题。但在动手之前,请牢记三条准则: 先测量,再优化:不要凭直觉猜测瓶颈在哪里。人类对性能瓶颈的
1. Go 的测试哲学 一门语言是否「工程友好」,很大程度上取决于它对测试的态度。Go 的选择是:把测试做成语言与工具链的一等公民,而不是交给第三方框架
Gin 是 Go 生态里最流行的 Web 框架之一,r.GET("/ping", handler) 一行代码就能跑起一个服务。但它并不是重新发明了一套网络模型
1. RPC 是什么 RPC 是远程过程调用(Remote Procedure Call)的缩写,是分布式系统中不同节点间流行的通信方式。它的核心目标是:让调用远程服务像调用本地
1. 为什么不用标准库 log 标准库 log 包足够简单,log.Println 开箱即用,但一旦项目走向生产环境,它的短板就会暴露: 能力 标准库 log 工程需求 日志分
1. 从一个问题说起 服务要发新版本,最粗暴的做法是 kill 掉旧进程再启动新的。但这中间存在一个空窗期: 进程被杀,正在处理的请求被硬生生中断,客户端收到
1. 三种读文件的姿势 Go 里读一个文件,主流有三种写法,它们的差异不在「能不能读」,而在一次读多少、要不要缓冲、内存占用多大: os 包直接读:os.O
1. Redis 是什么 Redis(REmote DIctionary Server,远程字典服务)是一个用 ANSI C 编写的开源、基于内存的键值型数据库,由意大利人 Salvatore Sanfilip
1. 通用 key 操作 在讲具体类型之前,先掌握与类型无关的 key 级操作。 1.1 存在性与删除 EXISTS key [key ...] # 返回存在的 key 个数(可以传多个,重复的 key 会重复计数) DEL key [key ...]
1. 概览 除了五种基本类型,Redis 还提供了几种"高级类型"。要理解的关键是:它们中大部分不是新的底层数据结构,而是建立在
1. 从对象到编码:Redis 的两层抽象 Redis 并不是"一种类型对应一种数据结构",而是设计了两层抽象: 对外的类型(type):s
1. 单线程模型的真相 1.1 「Redis 是单线程」到底指什么 这句话必须精确到"命令执行“这个层面: Redis 用一个主线程串行地执行所有
1. 过期时间是怎么存的 1.1 过期字典 expires Redis 的每个数据库(redisDb)里有两个核心字典: typedef struct redisDb { dict *dict; // 键空间:所有的 key → value dict *expires; // 过期字典:设置了 TTL
1. 为什么需要持久化 Redis 把数据放在内存里,进程一退出数据就全没了。持久化就是把内存数据写到磁盘,让重启后能恢复。 Redis 提供两种机制,思路完全不同: RDB
1. Redis 事务 1.1 基本命令 MULTI # 开启事务,之后的命令进入队列 ... 命令 ... # 每条命令返回 QUEUED,不执行 EXEC # 执行队列里的所有命令,返回结果数组 DISCARD # 放弃事
1. 发布订阅(Pub/Sub) 1.1 基本命令 # 订阅端 SUBSCRIBE channel [channel ...] # 订阅一个或多个频道 PSUBSCRIBE pattern [pattern ...] # 按模式订阅(glob 风格) UNSUBSCRIBE [channel ...] # 取消订阅(不带参数取消
1. 为什么需要主从复制 单机 Redis 有三个无法回避的问题: 单点故障:机器宕机、进程崩溃就完全不可用。即使有持久化,重启 + 加载 10GB 数据也要几分钟; 读性能上