Go教程技术文章
-
Go 的 sync/atomic.Bool 适合维护一个被多个 goroutine 访问的开关状态。本文从普通 bool 的竞争现象出发,说明 Load、Store、Swap、CompareAndSwap 的使用边界,以及复制和复合状态不能混用的问题。236 收藏 -
读取带长度前缀的二进制帧时,bufio.Reader.Read 可能短读,不能把一次 Read 当成完整帧。本文用 io.ReadFull 读取帧头和 payload,按 binary.BigEndian 解析长度,并在分配内存前做上限校验。236 收藏 -
用同一枚 maphash.Seed 为进程内多个独立 Hash 建立一致的哈希规则,并说明 Reset、并发共享和跨进程持久化的边界。236 收藏 -
Go 泛型约束不只是列出可参与运算的类型,还能通过接口嵌入和方法集限制调用者。本文用一个可编译示例拆开类型集、方法集与指针接收者的边界。235 收藏 -
讲清 Go context.WithoutCancel 的值查询、取消与截止时间语义,并用 HTTP 请求后的有界后台任务示例说明如何搭配 WithTimeout、避免 nil Done 阻塞和正确释放资源。235 收藏 -
Go TLS 主机名校验的关键是把拨号地址与证书名称分开看:使用 tls.Config.ServerName 指定证书校验名和 SNI,保留默认证书链校验,并用 x509.VerifyHostname 理解 DNS、IP、通配符和 Common Name 的边界。235 收藏 -
bytes.Buffer 的 Reset 会清空当前长度,但会保留底层存储。本文用 Len、Cap 和阈值策略说明如何复用正常大小的缓冲区,并隔离偶发的大容量缓冲区,避免复用池长期持有异常对象。235 收藏 -
Go atomic.Bool 适合维护读多写少的服务开关。本文从请求判断、管理侧切换、Swap 与 CompareAndSwap 的差异出发,说明零值、不可复制和不撤销已开始任务等边界。235 收藏 -
用一个有界任务队列说明 Go sync.Cond 的条件等待、关联锁、Wait 循环以及 Signal 与 Broadcast 的选择,重点解释为什么被唤醒后仍要重新检查共享状态。235 收藏 -
用 Hamba Avro 把 Go 结构体编码成 Avro record 时,核心是让 schema 字段、avro 标签和 Go 类型一一对应。本文分别说明 avro.Marshal、NewEncoder、字段类型映射和最小回读方式。235 收藏 -
bytes.Buffer 的 Grow 不是越大越好:它只保证后续写入有足够空间,Len 与 Cap 观察到的是不同维度。本文用请求拼装和最小测试说明如何估算容量、何时提前 Grow,以及如何验证扩容是否真的减少了分配。234 收藏 -
Go 的 HTTP Trailer 不在 Response.Header 中,客户端要先把 Body 读到 io.EOF,再从 Response.Trailer 读取响应体末尾的字段;服务端则要在写响应前声明 Trailer。234 收藏 -
讲清 Go slices.Chunk 的固定大小切分、底层数组别名、cap 裁剪、append 行为,以及何时应该用 slices.Clone 保存独立批次。234 收藏 -
用 Go image/draw 按目标尺寸计算居中裁剪框,再将源图区域复制到缩略图画布,并排查边界、偏移与合成模式问题。234 收藏 -
Go Ticker 动态调整周期不必重复创建对象,使用 Reset 复用同一条通道即可。本文说明周期校验、单一拥有者、暂停恢复和 Stop 清理的边界。234 收藏