2025-02-07 Go 在 Go 中如何将 [][]byte 转为 io.Reader ? 起因:在春节前的某一天,我在 ekit 项目的交流群里看到大明老师发了这样一条消息: 各位大佬,问个小问题,有咩有谁用过 [][]byte 转为 io.Reader 的东西?我以前搞过一次,但是我忘了是我手搓了一个实现,还是用的开源的,还是SDK 自带的 阅读全文…
2025-01-30 Go 用 Go 语言还原 2025 刘谦春晚魔术! 魔术截图 去年大年初二,我写了一篇文章「用 Go 语言实现刘谦 2024 春晚魔术,还原尼格买提汗流浃背的尴尬瞬间!」,里面揭秘了小尼魔术失败的原因,这也是我公众号的第一篇文章。 今天刚好也是大年初二,我再带大家用 Go 语言还原一下刘谦在蛇年春晚上的魔术。 阅读全文…
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 的设计和实现。 阅读全文…