Go教程技术文章
-
Go bufio.Reader 的 ReadString 和 ReadBytes 都能按分隔符读取一行,但返回类型、数据转换和末尾 io.EOF 的处理不同。本文用示例说明两者怎么选。258 收藏 -
Go 读取包含 0x00 的二进制流时,不要把零字节当成文本结束符。本文解释 Scanner 的限制,并用 bufio.Reader 和 io.ReadFull 处理分隔帧、固定长度帧与 io.EOF。215 收藏 -
自定义 bufio.Scanner 的 SplitFunc 时,最后一个字段没有分隔符很容易被漏掉。本文用逗号分词示例说明 atEOF 与剩余 data 的关系,并给出连续分隔符、空 token 和 ErrFinalToken 的处理边界。243 收藏 -
Golang · Go教程 | 2个月前 | 错误处理 · 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 用 io.CopyN 从网络连接复制固定块时,完整条件不是只看错误是否为空;本文说明如何设置 SetReadDeadline,结合 written、io.EOF 和 os.ErrDeadlineExceeded 处理半包、总时限与空闲超时。447 收藏 -
使用 Go io.CopyN 写归档文件时,不能只看目标文件是否存在;本文用 written、err、临时文件和 Stat 组合确认目标长度,避免把部分归档误当成功。470 收藏 -
解释 Go io.CopyN 返回 ErrUnexpectedEOF 的真实来源:普通短源输入通常是 io.EOF,而底层 Reader 已报告结构化数据截断时,CopyN 会保留该错误。文章给出 written、err、ReadFull 和调用方兼容处理的判断方法。199 收藏 -
Go 服务端处理上传或请求体时,通常先用 MaxBytesReader 设定请求级上限,再用 io.LimitReader 限制一次业务读取;本文解释两者的错误、关闭和超限判断差异。281 收藏 -
io.LimitReader 到达 N 字节后会主动返回 EOF,后续底层错误自然无法被观察。本文用请求体上限场景说明错误为何消失,并给出 max+1 检测超限的写法。180 收藏 -
用 Go io.LimitReader 限制上传时,不能只看 EOF;把读取上限设为 maxBytes+1,再根据实际读取字节数判断是否超限。333 收藏 -
讲清 Go io.ReadFull 读取固定二进制头部时的缓冲区安排:先读定长头,再校验长度并分配载荷,区分 EOF 与 ErrUnexpectedEOF。427 收藏 -
Go 的网络连接是字节流,一次 Read 只保证返回当前可用数据。本文用固定长度包头示例说明短读原因、io.ReadFull 的正确边界,以及 EOF、超时和变长消息的处理方式。115 收藏 -
Go io.ReadFull 读取固定长度消息时,只有 n 等于缓冲区长度且 err 为 nil 才算成功;本文区分 io.EOF、io.ErrUnexpectedEOF 与其他 Reader 错误,并给出安全的读取循环写法。219 收藏 -
Go 子测试调用 t.Parallel 后,输入、可变夹具和共享资源需要分别管理。本文用一个小型测试项目说明循环变量绑定、数据隔离、互斥锁、父级清理与 go test -race 的验收方法。303 收藏 -
Go 的 testing.T.Cleanup 会在当前测试及其子测试完成后调用清理函数,同一测试中多个回调按后注册先执行。本文用子测试示例说明 LIFO 顺序、资源依赖和并发注册边界。242 收藏