并发控制:goroutine、channel、锁该怎么在服务里使用
Go 最吸引人的特点之一,就是并发写起来相对直接。goroutine 很轻,channel 很方便,标准库也提供了不少同步原语。这些能力让很多人一开始就对 Go 的并发印象很好。但真正把它们放进后端服...
Go 最吸引人的特点之一,就是并发写起来相对直接。goroutine 很轻,channel 很方便,标准库也提供了不少同步原语。这些能力让很多人一开始就对 Go 的并发印象很好。但真正把它们放进后端服...
很多同学刚接触 Go Web 开发时,会把中间件理解成“框架提供的一层额外功能”,把 context 理解成“传参数的工具”。这种理解不能说错,但还远远不够。只要你开始认真做后端服务,就会很快发现:日...
Go 的错误处理看起来很朴素:函数返回 error,调用方判断 if err != nil。这种设计非常直接,也很符合 Go 的风格。但真正写后端服务时,问题并不在“知不知道怎么判断错误”,而在“这个...
很多同学刚开始写服务时,对日志的理解往往很朴素:哪里想看就 fmt.Println 一下,出错了就打印一个字符串。这种方式在本地调试时当然够用,但只要服务开始跑在测试环境、上线环境,日志的角色就完全变...
一个后端服务只要离开本地开发环境,配置问题就一定会出现。数据库地址、监听端口、日志级别、第三方依赖地址、鉴权密钥、超时参数,这些内容在不同环境里往往都不一样。如果没有配置管理意识,最常见的结果就是:代...
很多人第一次写 Go Web 服务,往往是从一个 main.go 开始:注册路由、写处理函数、启动监听,几十行代码就能把接口跑起来。这种方式很适合入门,但项目一旦稍微变大,所有逻辑都堆在入口文件里,就...
很多人开始认真补“Kubernetes 简介”,往往不是出于兴趣,而是因为线上已经出事了。系统平时也能跑,可一到高峰、发布、切换、批量任务或者局部抖动时,问题就集中冒出来。这个时候你会发现,故障类主题...
很多人接触 Kubernetes 的方式,都是先从零碎需求开始:有人是因为线上慢了,有人是因为接口不一致,有人是因为部署和发布出了问题。于是学到的内容也常常是碎的,今天补一篇索引,明天补一个缓存击穿,...
当你开始学“Kubernetes 的核心架构”这类设计主题时,通常意味着单纯会操作已经不够了。系统开始变大、对象开始变多、协作开始变复杂,你会越来越频繁地遇到一种情况:看起来好像每个方案都能做,但真正...
很多人第一次真正停下来补“安装与最小实验”,往往并不是为了系统学习,而是因为工作里已经隐约感觉这里有坑。可能是同事在说这个词时你大概听得懂,但真要自己解释就有些模糊;也可能是系统已经出现了一些现象,让...