Go教程技术文章
-
用 time.NewTimer 和单 goroutine 事件循环实现可重置的空闲超时,讲清 Reset 前排空、Go 1.23 语义变化,以及 time.After、AfterFunc 的选择边界。219 收藏 -
Go io.ReadFull 读取固定长度消息时,只有 n 等于缓冲区长度且 err 为 nil 才算成功;本文区分 io.EOF、io.ErrUnexpectedEOF 与其他 Reader 错误,并给出安全的读取循环写法。219 收藏 -
Go 的 regexp.Split 遇到空匹配时,结果取决于匹配区间、相邻空匹配抑制规则和 n 参数。本文用索引和小例子说明如何判断。219 收藏 -
Go 的 http.ServeContent 不会替你决定 Cache-Control;应在调用前设置缓存策略,并配合 modtime 或 ETag 处理条件请求。本文用一个文件接口讲清响应头的职责、设置时机与常见边界。219 收藏 -
Golang · Go教程 | 2个月前 | Context · 超时控制 · Go教程 · Go context 请求超时 Transport http.Client Client.Timeout ResponseHeaderTimeout
Go HTTP 客户端超时不要只靠一个 context 或一个 Client.Timeout。更稳的做法是把总预算、连接、TLS 握手、响应头和读取阶段分开设置,再用错误判断和日志字段确认到底卡在哪一段。218 收藏 -
Go 的 subtle.ConstantTimeCompare 不是任意字符串比较器:长度不同会立即返回 0。本文解释这一设计如何约束耗时模型,并用固定长度摘要给出正确用法。218 收藏 -
Go time.Ticker.Stop 只停止后续 tick,不会关闭 ticker.C。本文解释通道不结束的原因,并用 done channel 与 context.Context 设计可退出的消费循环。218 收藏 -
Go 的 io.Pipe 可把只会写入的生产者连接到只会读取的消费者。本文用完整示例说明同步背压、关闭顺序、错误传播以及避免 goroutine 阻塞的方法。218 收藏 -
Go 项目日志从 fmt.Println 迁到 slog,不只是换一个打印函数。本文用接口调用链场景讲清 slog 字段设计、上下文传递、Handler 选择、敏感字段处理和灰度接入路径。217 收藏 -
Go 的 http.Cookie.MaxAge 设为负数会生成立即删除语义,但删除是否生效还取决于 Name、Path、Domain 是否与原 Cookie 一致。本文用响应头、代码和排查表说明 MaxAge 三种取值。217 收藏 -
Go 1.22 及以上版本可以在 http.ServeMux 模式中同时声明请求方法和路径,本文用用户资源路由说明 GET、HEAD、POST、DELETE、PathValue、405 和 Allow 的匹配边界。217 收藏 -
Go channel 的关闭责任应跟随发送方和生命周期所有者划分。本文用单生产者、多生产者、取消信号三种场景说明 close 的位置、协调方式和排查清单,避免向已关闭通道发送数据。217 收藏 -
Go compress/flate 的 HuffmanOnly 只做 Huffman 熵编码,不再寻找 Lempel-Ziv 重复串。它更适合已经经过 Snappy、LZ4 等 LZ 类压缩、但字节频率仍明显偏斜的数据;普通文本直接使用它往往会牺牲压缩率。本文用原创示例说明选择边界、资源收尾和上线前对比方法。217 收藏 -
Go 标准库 encoding/csv 默认会用首条记录推断字段数,遇到不齐列或引号不规范的文件就可能在中途报错。本文用导入小工具拆开 FieldsPerRecord、LazyQuotes、ParseError 和逐行处理边界。216 收藏 -
Go 1.25 中可以用 runtime/debug.SetCrashOutput 把未处理 panic 和致命错误追加写入单独文件。本文用一个可运行的崩溃留证流程,说明文件轮转、监控进程接收和恢复边界。216 收藏