Go语言技术文章
-
Go 中通常把 sync.Mutex 作为值字段嵌入结构体,再用指针接收者编写方法。本文解释值接收者为何会复制锁,以及何时才适合使用 *sync.Mutex。443 收藏 -
filepath.Rel 报错通常不是目标文件不存在,而是 basePath 和 targPath 不在同一个路径坐标系。本文用 Go 示例拆解绝对相对混用、Windows 卷名、UNC 路径和 URL 误用,并给出可复用的错误处理封装。299 收藏 -
Go 里 range channel 一直不退出,通常不是 range 语法错,而是发送方完成后没有关闭 channel。本文用一个最小生产者消费者示例拆清关闭责任,并说明多发送方、nil channel 和提前 close 的边界。245 收藏 -
Windows 下 filepath.Match 会把反斜杠当作路径分隔符,而不是转义符。本文用可运行示例说明本地路径、glob 规则和统一斜线路径该如何分工。168 收藏 -
time.AfterFunc 会在独立 goroutine 中执行回调。本文用事件 channel、stop 信号和 callbackDone 完成信号,说明如何让主 goroutine 安全接收超时事件,并处理 Stop、Reset 与回调并发边界。109 收藏 -
Go os.Link 返回错误时,不要只看字符串。通过 LinkError 和底层 errno 区分跨文件系统、权限、目标冲突与文件系统不支持,再决定复制或符号链接兜底。386 收藏 -
Go select 同时有多个 case 可以执行时不会按书写顺序固定选择,而是从可执行通信中做均匀伪随机选择。本文说明求值规则、常见误区,以及如何实现尽力或严格优先级。291 收藏 -
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 收藏