2026-01-22
随笔
0

用于记录平时学习中的想法和对事务的理解

2026-06-01
go
0
go
sync 包的武器库: 互斥锁 Mutex / RWMutex — 保护共享数据 等待组 WaitGroup — 等一批 goroutine 干完 单次执行 Once — 只执行一次(单例、初始化) 对象池 Pool — 复用临时对象,降低 GC 压力 条件变量 Cond — 在特定条件下通知等待的 goroutine 原子操作 atomic(独立包) — 无锁的数值操作 并发 Map sync.Map(本章不讲) — 特定场景下的并发 map

Rob Pike 的经典原则: "Don't communicate by sharing memory; share memory by communicating."

翻译:别用共享内存来通信,用通信来共享内存。

但这不代表不能用锁。简单状态用锁,复杂协调用 channel。

2026-05-27
go
0
shell
context是一个树形结构,最顶层就是context.Background(),这个context是初始的context,不能取消,用于派生后面的子context 而context.TODO()获得一个空context,类似context.Background(),但是这个在代码中代表一个暂不确定用法的占位 而生成context之前有下面的方式: 1. context.Background()或者context.TODO() : 获得根context,一般用于创建首个context的时候用 2. func WithValue(parent Context, key, val any) Context :创建带参键值对的context 3. func WithCancel(parent Context) (ctx Context, cancel CancelFunc) : 创建带cancel函数的,必须手动执行cancel 4. func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) : 创建带截至时间的,一般用于链式传播 5. func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) : 创建超时contxt,用于单任务,而如果链式传播使用这个,容易有误差,比如同时创建两个协程,都使用timeout,那么先创建的比后创建的总是快一点,使用deadline就不会有这种问题 6. func WithCancelCause(parent Context) (ctx Context, cancel CancelCauseFunc) 7. func WithTimeoutCause(parent Context, timeout time.Duration, cause error) (Context, CancelFunc) 6和7都是可以传递自定义的错误,比如超时context,如果超时了,通过下面例子展示:
2026-05-21
go
0

Go Interface 底层结构详解

学习日期:2026-05-21 所属阶段:阶段一·第2课补充 — 类型系统深入 前置知识:slice 底层、map 底层、string 底层


2026-05-20
go
0

练习1 — map 遍历顺序验证

建一个 8 元素的 map,range 5 次,每次打印前 3 个 key → 观察随机性

加分:跑 10000 次统计每个 key"当第一"的频率,验证均匀分布

练习2 — string ↔ []byte 拷贝验证

用 unsafe 读底层 Data 指针,验证 []byte(s) 和 string(b) 都会拷贝

加分:用 unsafe 实现零拷贝转换(但别改!会 panic)

可选:strings.Builder vs += 拼接 10000 次的性能对比