-
区分json.Decoder读取值流时的正常EOF、截断错误与数组输入,提供复用Decoder的循环和单值尾部检查示例,说明预读缓冲、数据处理及关闭责任。
-
Go 的 unicode.IsNumber 判断的是 Unicode 数字类别 N,不等于只判断 0 到 9,也不等于能识别所有中文汉字数字。本文对比 IsNumber、IsDigit 与汉字数字的边界,并给出按业务规则筛选 rune 的写法。
-
Go sync.Cond 的 Signal 只是唤醒提示,不代表共享条件已经成立,也不会保存无人等待时的通知。本文用队列示例说明为什么 Wait 必须在持锁的 for 循环中重新检查状态,以及状态修改、Signal 和 Broadcast 的配合边界。
-
Go encoding/xml 的 InputOffset 返回当前解析器的字节偏移,既是最近返回 token 的结束位置,也是下一个 token 的起始位置。本文用流式 token 记录和错误上下文示例说明调用时机、字节与行列的区别,以及 UTF-8 和 EOF 边界。
-
用 Go Doublestar 的 GlobWalk 按 ** 模式遍历 fs.FS,在回调里处理文件、跳过目录并传播错误;同时比较 GlobWalk、Glob 和 FilepathGlob 的适用边界。
-
Go Humanize 的 Bytes 和 IBytes 适合把字节数转成可读文本,但文本排序会受数字位数和单位影响。正确做法是保留原始字节数按数值排序,旧字符串则先用 ParseBytes 转回统一数值。
-
Go 1.21 之后,go 命令可以按项目要求自动切换工具链。本文用 GOTOOLCHAIN=local 固定当前捆绑版本,说明环境变量优先级、go.mod 约束、local 与 auto 的差异,以及更高版本要求下如何处理。
-
本文围绕 Go httptrace.PutIdleConn 解释连接回收到 Transport 空闲池时的 nil 与错误信号,并对比 DisableKeepAlives、响应体关闭和 HTTP/2 下的判断边界。
-
bytes.CutPrefix 同时返回裁剪后的字节视图和 found 标志。本文用消息头示例区分空输入、空前缀、未匹配前缀与空载荷,并说明异常分支和切片生命周期。
-
net.Dialer KeepAlive 只负责 TCP 层的保活探测,不会替代 HTTP 连接池的空闲回收配置。本文用 Go 示例区分 KeepAlive、IdleConnTimeout 和请求超时,并展示批处理里复用 Client、Transport 与 io.CopyBuffer 缓冲区的写法。
-
围绕并发 Map 热路径解释 Go 逃逸分析中的 heap allocation,给出值语义、返回值和缓冲区复用的改法,并用 benchmem 判断优化是否值得保留。
-
多个 goroutine 竞争更新 Go atomic.Pointer 时,CompareAndSwap 返回 false 只表示期望指针已经变化。本文给出失败后重读、有限重试和指数退避的实现方式,并说明发布前初始化与发布后只读的边界。
-
Go 的 go env -w 会把环境默认值保存到用户配置文件,适合持久化 GOTOOLCHAIN、GOBIN 等工具链设置。本文区分进程环境与持久化默认值,介绍 GOENV、-json、-changed 和 -u 的配合用法,并说明 go.mod 与工具链选择的优先关系。
-
在 Go 里,如果用 bufio.NewReader.ReadString 读取用户输入,拿到的结果通常会把末尾的换行符 n 一并带上。这样一来,直接拿它和 "hi" 做比较,结果往往对不上。要想判断准确,得先把尾部换行去掉,常见做法包括使用 strings.TrimRight、bufio.Scan
-
Go 接收多种 JSON 事件时,不必一开始把所有 payload 解成 interface{}。用 json.RawMessage 保留原始 JSON,再按 kind 分流解析,可以减少无效结构体和类型断言;但它仍然持有字节数据,不能替代大小限制、深拷贝和错误校验。