Go 里的 sync.WaitGroup:把并发任务“等完”这件事说清楚

sync.WaitGroup 是 Go 并发里最常用的等待机制之一,核心只有 Add、Done、Wait 三个动作,但一旦调用时机或传参方式出错,就很容易卡死或触发 panic。本文按“能解决什么问题、怎么组合使用、哪些地方最容易踩坑”的顺序重写,方便你直接对应到项目场景判断是否该用它。

Go 里的 sync.WaitGroup:把并发任务“等完”这件事说清楚

Go 并发编程中的非阻塞锁:TryLock()

Go 1.18 为 `sync.Mutex` 和 `sync.RWMutex` 补上了 `TryLock()`,让加锁失败时可以立即返回,而不是像 `Lock()` 一样持续阻塞。它适合“抢到就做、抢不到就放弃”的轻量并发控制,但也不该被当成通用解法,关键还是先判断场景是否真的需要非阻塞锁。

Go 并发编程中的非阻塞锁:TryLock()

Golang 日志中并发问题如何解决

Go 自带日志库通常能在多 goroutine 下安全使用,但一旦日志流程碰到共享文件句柄、数据库连接或延迟初始化,就可能出现竞态和数据错乱。本文围绕三种常见处理方式展开:互斥锁、`sync.Once` 与 channel 串行化,帮助你按场景选型。

Golang 日志中并发问题如何解决

一文理解 C#.NET Tuples:从基础到高级应用

C# 元组的核心价值,在于用更少的样板代码组织少量异构数据。本文从 `Tuple` 与 `ValueTuple` 的差异讲起,梳理声明、解构、返回多个值、模式匹配、LINQ 与异步场景,并补出在 JSON、记录类型和长期维护中的边界,帮助你判断它该用在哪里、又该在哪些地方收手。

一文理解 C#.NET Tuples:从基础到高级应用