Go语言技术文章
-
Go select 在多个通信操作同时就绪时不会按 case 顺序提供业务优先级,而是选择一个可执行通信。本文用高价值、普通和后台三类通道说明非阻塞探测、处理预算、关闭边界与防饥饿设计。417 收藏 -
Go 的 os.ReadDir 函数会按文件名排序,而 (*os.File).ReadDir 返回目录顺序。本文用最小示例说明两者差异,并给出目录批处理和测试中保持结果稳定的写法。402 收藏 -
Go select 可以用 nil channel 动态屏蔽一个通信分支:初始设为 nil,启用时切换为有效 channel,停用或关闭后再置 nil。本文说明 select 的重算边界、关闭处理和 default 常见坑。477 收藏 -
讲清 Go io.LimitReader 的字节上限与 EOF 语义,并用 http.MaxBytesReader 实现可识别超限错误的上传接口。362 收藏 -
多个 goroutine 共用一个 channel 时,不要让任意发送方直接关闭它。本文用 WaitGroup 统一等待发送方,用协调者关闭数据 channel,并用 done 处理接收方提前退出,避免 send on closed channel 和发送 goroutine 泄漏。312 收藏 -
Go 的 io.SectionReader 可以把大文件映射成一个固定的字节窗口。本文用原创示例说明如何按偏移和长度读取、如何区分 ReadAt 与 Seek,以及短读、EOF 和边界校验怎么处理。225 收藏 -
Go 关闭带缓冲 channel 后,已经写入缓冲区的元素仍会按顺序读完。本文用代码说明 close、ok、range 与零值判断的边界。436 收藏 -
用 Go 的 io.MultiReader 把多个 Reader 顺序拼成一个输入流,掌握 EOF、错误传播、分隔符和底层资源关闭的边界。434 收藏 -
Go 的切片不能直接作为 map key,因为切片不是可比较类型。本文解释编译期限制、interface 动态键的 panic,并给出字符串、数组和结构体三种迁移方案。396 收藏 -
Go compress/gzip 写入结束时要区分 Flush 与 Close:Flush 只推送待写压缩数据,Close 才会刷新剩余数据并写入 GZIP footer,且不会自动关闭底层文件或连接。397 收藏 -
Go 在单 goroutine 中允许 range map 时 delete,但遍历顺序不稳定,新增键可能跳过;并发读写仍需锁或单 goroutine 所有权。426 收藏 -
讲清 Go compress/gzip.Header.Name 的设置时机、Writer.Close 和 Reader.Name 的读取方式,并区分 gzip 内部文件名与磁盘路径、下载文件名。251 收藏 -
Go maps.Clone 传入 nil map 后,返回值仍是 nil:读取安全但写入会 panic。本文对比 nil map 与空 map 的长度、读写和初始化差异,并说明 Clone 对嵌套 slice、map、指针值仍是浅复制。152 收藏 -
Go 的 gzip.Reader 默认支持连续 gzip 成员;本文用一个小项目说明如何整体解压拼接流,以及如何关闭 Multistream 后逐个读取成员并正确处理 EOF 和校验错误。428 收藏 -
slices.Clone 会复制元素并保留输入切片的 nil 语义;copy 只搬运元素,目标切片是否为 nil、长度够不够,都由调用方先决定。本文用对照代码说明两者的边界。479 收藏