Go语言技术文章
-
Go context deadline 到期不会强制杀掉后台 goroutine。本文用 Done、Err、可取消阻塞点和 WaitGroup 拆解不退出原因,并给出安全的协作式退出写法。368 收藏 -
Go bufio.Reader.ReadSlice 遇到 ErrBufferFull 并不代表长行结束。本文用原创 Go 示例说明如何及时复制片段、循环 append,并正确处理分隔符、EOF 与其他错误。283 收藏 -
Go context.WithDeadline 派生子上下文时,deadline 只能更早不能延后。本文用原创示例说明父子截止时间、cancel 释放、Err 判断和多层预算的边界。477 收藏 -
Go 的 bufio.Reader.Peek 只查看缓冲区中的下一个字节窗口,不会推进读取游标,所以后续 Read 仍可能读到同样内容。本文解释缓冲区填充、消费位置、切片有效期,以及 Read、Discard 和 Peek 的正确配合。459 收藏 -
Go 中 context deadline exceeded 表示截止时间到期,context canceled 表示主动取消。本文用 errors.Is、ctx.Err 和 context.Cause 说明判断边界、错误包装与日志重试处理。337 收藏 -
Go bufio.Reader 的 ReadString 和 ReadBytes 都能按分隔符读取一行,但返回类型、数据转换和末尾 io.EOF 的处理不同。本文用示例说明两者怎么选。258 收藏 -
Golang · Go问答 | 1个月前 | Context · 并发控制 · Go问答 · Go 资源清理 sync.Once context.WithCancel context.CancelFunc
Go 的 CancelFunc 可以被多个 goroutine 重复调用,但这不代表文件、连接和事务清理也天然幂等。本文用统一停止入口、等待工作退出和 sync.Once 设计多入口收尾,说明取消信号与资源释放的边界。441 收藏 -
Go 读取包含 0x00 的二进制流时,不要把零字节当成文本结束符。本文解释 Scanner 的限制,并用 bufio.Reader 和 io.ReadFull 处理分隔帧、固定长度帧与 io.EOF。215 收藏 -
Go context.WithCancel 的父子关系是单向取消传播:父 context 取消会让子 context 和后代一起结束,子 context 取消不会影响父 context 或兄弟节点。本文用代码说明 Done、Err、cancel 和资源释放边界。100 收藏 -
自定义 bufio.Scanner 的 SplitFunc 时,最后一个字段没有分隔符很容易被漏掉。本文用逗号分词示例说明 atEOF 与剩余 data 的关系,并给出连续分隔符、空 token 和 ErrFinalToken 的处理边界。243 收藏 -
长任务不要把所有 cancel 都拖到最外层释放。本文用 Go context.WithCancel 说明阶段级上下文的创建、取消传播、并行 worker 退出和错误区分。287 收藏 -
Golang · Go教程 | 1个月前 | 错误处理 · bufio · Go教程 · Go bufio.Scanner Scanner.Buffer 超长行 MaxScanTokenSize ScanLines
Go bufio.Scanner 默认 token 上限约为 64 KiB,扫描日志、CSV 或协议长行时可能返回 token too long。本文解释 Scanner.Buffer 的初始容量与最大上限,比较 Scanner、Reader 和整体读取的选择边界。414 收藏 -
Go 1.23 起,失去引用的 time.After 定时器可以被回收,但高频循环每轮创建 timer 和 channel 仍有分配与调度成本。本文说明 time.After 的适用边界,以及如何用可复用 Timer 配合 Stop、排空和 Reset。501 收藏 -
Go 用 io.CopyN 从网络连接复制固定块时,完整条件不是只看错误是否为空;本文说明如何设置 SetReadDeadline,结合 written、io.EOF 和 os.ErrDeadlineExceeded 处理半包、总时限与空闲超时。447 收藏 -
Go select 没有 default 并不是异常:当所有通信 case 都暂时不可执行时,当前 goroutine 会等待;本文区分缓冲、关闭和 nil channel,并给出 default、超时与取消的选择方法。427 收藏