2025-01-21 Go Go 并发控制:semaphore 详解 今天我们来介绍一个 Go 官方库 x 提供的扩展并发原语 semaphore,译为“信号量”。因为它就像一个信号一样控制多个 goroutine 之间协作。 阅读全文…
2025-01-16 Go Go os/exec 极速入门 os/exec 是 Go 提供的内置包,可以用来执行外部命令或程序。比如,我们的主机上安装了 redis-server 二进制文件,那么就可以使用 os/exec 在 Go 程序中启动 redis-server 提供服务。当然,我们也可以使用 os/exec 执行 ls、pwd 等操作系统内置命令。本文不求内容多么深入,旨在带大家极速入门 os/exec 的常规使用。 阅读全文…
2025-01-08 Go 超简单!用 Go 启动 Redis 实例 最近写了几篇 Go 并发编程相关的文章,想必有些读者看多了可能会有些厌倦,今天来点轻松的内容,介绍一个可以用来启动 redis-server 的开源库 github.com/stvp/tempredis。这是一个用 Go 语言开发的包,专门用于创建临时的 Redis 实例,主要用于测试目的。它可以在本地启动一个临时的 Redis 服务实例,在测试结束后自动关闭并清理,帮助开发者避免对实际的 Redis 环境进行操作。 阅读全文…
2025-01-01 Python 我与 Python 大家好,我是江湖十年。 2025 年第一天,我想以此文作为我的博客在今年发布的第一篇文章,也作为新一年的起点。 本文翻译自 Python 语言创始人 Guido van Rossum 在 2016 年 4 月 27 日的一次演讲,讲述自己的经历,以及如何创造出 Python 这门语言。 阅读全文…
2024-12-29 Go Go 并发控制:sync.Cond 详解 在 Go 中因为 channel 的存在,sync.Cond 并发原语并不常用。不过在一些开源组件中还能能见到 sync.Cond 的应用,比如 Kubernetes 用它来实现并发等待队列,这也是 sync.Cond 的典型应用场景。本文将通过源码和示例带你学会 sync.Cond 的正确用法。 阅读全文…
2024-12-23 Go Go 并发控制:sync.WaitGroup 详解 前段时间我在《Go 并发控制:errgroup 详解》一文中讲解了 errgroup 的用法和源码,通过源码我们知道 errgroup 内部是使用 sync.WaitGroup 实现的,那么本文就更进一步,来探索下 sync.WaitGroup 源码是如何实现的。 阅读全文…
2024-12-16 Go Go 源码是如何解决测试代码循环依赖问题的? 最近我写了一篇讲解 context 包源码的文章《Go 并发控制:context 源码解读》,在阅读源码的过程中,我在 context 包测试代码中发现了一个解决循环依赖的小技巧,在此分享给大家。 阅读全文…
2024-12-09 Go Go 并发控制:context 源码解读 context 是 Go 语言的特色设计之一,主要作用有两个:控制链路和安全传值,并且 context 是并发安全的。context 在 Go 1.17 版本被引入,经过数年的迭代,在设计和用法上已经趋于稳定,本文以最新的 Go 1.23.0 版本源码为基础,带你深入理解 context 的设计和实现。 阅读全文…
2024-12-04 Go 在 Go 中如何获取 goroutine 的 id? 如果你使用过如 Python、Java 等主流支持并发的编程语言,那么通常都能够比较容易的获得进程和线程的 id。但是在 Go 语言,没有直接提供对多进程和多线程的支持,而是提供了 goroutine 来支持并发编程。不过在 Go 中,获取 goroutine 的 id 并不像其他编程语言那样容易,但依然有办法,本文就来介绍下如何实现。 阅读全文…
2024-11-24 Go Go 并发控制:singleflight 详解 singleflight 是 Go 官方扩展库 x 中提供的扩展并发原语,能够将多个并发请求合并为一个,降低服务端压力。本文就来介绍下它的用法和实现原理。 阅读全文…