Go教程技术文章
-
用 Go 1.24 的 os.OpenRoot 固定文件访问根目录,再结合 bufio.Reader.Peek 查看文件头而不推进读取位置;文章同时说明短文件、缓冲区大小、越界路径和符号链接边界的处理方式。237 收藏 -
用 os.DirFS 和 io/fs.WalkDir 遍历一个目录,保留 Go 文件系统约定的相对路径;本文从根目录、回调错误、普通文件筛选和 filepath 转换几个体验点说明如何写成可复用的小函数。237 收藏 -
Go 模糊测试发现失败输入后,会把最小化样本写入 testdata/fuzz。本文说明如何用 -run 单独复现、提交种子文件,并让普通 go test 持续执行这条回归用例。237 收藏 -
使用 Go base64.NewEncoder 和 io.Copy 流式编码文件,避免一次性读取大文件,并正确处理 Close 收尾、填充和错误返回。236 收藏 -
Go filepath.VolumeName 用于提取路径开头的卷名:Windows 盘符路径返回 C:,UNC 共享路径返回 \\host\share,其他平台返回空字符串。本文用跨平台示例拆解返回边界,并说明它与绝对路径判断、路径清理和安全校验的区别。236 收藏 -
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 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 收藏 -
Go Ticker 动态调整周期不必重复创建对象,使用 Reset 复用同一条通道即可。本文说明周期校验、单一拥有者、暂停恢复和 Stop 清理的边界。234 收藏 -
Go slices.Sorted 可以把 iter.Seq 中的有序元素收集成新的排序切片,适合整理 map 键、迭代器结果和需要稳定输出的集合。本文说明最小写法、复制边界、空输入、重复值以及 SortedFunc 与原地排序的选择。234 收藏