摘要: 下面来详细拆解 sync.Cond 条件变量。 一、什么是条件变量,它解决什么问题? 互斥锁 (sync.Mutex) 解决的是互斥进入临界区的问题,但它本身没法表达 “等待某个条件成立” 这种语义。 当 goroutine 发现条件不满足时,一般只能两种做法: 忙等:循环检查条件占用 CPU; 定 阅读全文
posted @ 2026-05-13 15:29 Acyclonepl 阅读(1) 评论(0) 推荐(0)
摘要: *sync.Cond:放心传递,所有使用者共同操作同一个条件变量。 sync.Cond 值:不可复制传递,必须始终以指针形式使用,否则会出现难以调试的并发 bug。 阅读全文
posted @ 2026-05-13 14:33 Acyclonepl 阅读(1) 评论(0) 推荐(0)
摘要: 它们都实现了 sync.Locker 接口。 sync.Locker 接口的定义 在 sync 包中,Locker 是一个极简的接口,只有两个方法: type Locker interface { Lock() Unlock() } 谁实现了它? *sync.Mutex 有 Lock() 和 Unl 阅读全文
posted @ 2026-05-13 14:27 Acyclonepl 阅读(2) 评论(0) 推荐(0)
摘要: 一、核心设计差异 sync.Mutex:保护共享内存区域。多个 goroutine 都想访问同一块数据,通过锁保证互斥访问。重点是 “互斥”。 channel:传递数据的所有权。通过发送和接收,把数据从一个 goroutine 转移给另一个。重点是 “通信”和“传递所有权”。 二、什么时候用 syn 阅读全文
posted @ 2026-05-12 16:46 Acyclonepl 阅读(2) 评论(0) 推荐(0)
摘要: 在 Go 里,可以通过 go test 的几个标志来开启测试覆盖度分析,同时这种做法会带来一些运行时的开销,需要注意。 一、如何开启测试覆盖度分析? 1. 最简单的用法:-cover go test -cover ./... 这会输出每个被测包在测试中执行的语句占比,例如: ok example.c 阅读全文
posted @ 2026-05-12 11:35 Acyclonepl 阅读(3) 评论(0) 推荐(0)
摘要: 在 Go 的测试框架里,testing.T(用于单元测试)和 testing.B(用于基准测试)都实现了 testing.TB 接口,因此它们共享一套日志、断言、跳过、并行和资源管理的方法;同时 testing.B 还有一组专为性能测量设计的独有方法。下面我按功能梳理一下这些方法以及它们的作用。 一 阅读全文
posted @ 2026-05-12 11:34 Acyclonepl 阅读(3) 评论(0) 推荐(0)
摘要: 在 Go 中,可以在 defer 函数里引发 panic,但这会引入微妙的行为变化。核心依赖于当前 goroutine 是否已经处于 panic 状态,以及 recover 的调用时机。 1. 正常执行流中,在 defer 里引发 panic 如果函数正常执行到返回(没有发生 panic),defe 阅读全文
posted @ 2026-05-11 19:36 Acyclonepl 阅读(2) 评论(0) 推荐(0)
摘要: 在 Go 中,错误体系是围绕 error 接口展开的组合与包装树,而不是传统的类继承树。这里列举 3 个非常常见的错误类型,并描绘它们在体系中的位置和关系。 三个具体错误类型 *errors.errorString 由 errors.New("some message") 创建。 只包含一个字符串, 阅读全文
posted @ 2026-05-11 19:19 Acyclonepl 阅读(2) 评论(0) 推荐(0)
摘要: 这段代码演示了 Go 的类型分支(type switch) 和空接口类型转换的用法,同时揭示了一个常被忽略的细节:byte 和 uint8 是同一个类型,匹配时遵循顺序优先原则。 代码逐行解释 value6 := interface{}(byte(127)) byte(127) 是一个类型转换,生成 阅读全文
posted @ 2026-05-11 18:09 Acyclonepl 阅读(3) 评论(1) 推荐(0)
摘要: Go 的 runtime 包提供了若干与 GPM 调度模型直接相关的函数,按三要素归类如下: 与 P(逻辑处理器)相关 函数 作用 GOMAXPROCS(n int) int 设置可同时执行 Go 代码的最大 P 数量(即并行度),并返回之前的设置。默认值为 runtime.NumCPU()。 Nu 阅读全文
posted @ 2026-05-11 17:38 Acyclonepl 阅读(2) 评论(0) 推荐(0)