Go语言技术文章
-
Go 1.23 起可用 slices.Backward 按降序索引反向遍历切片,无需复制或改变元素顺序。本文给出最小写法、提前停止、索引写回、结构体值语义、空切片和旧版本兼容示例。501 收藏 -
Go 计算大文件 CRC-32 不必先读完整文件。crc32.New 返回可持续写入的 hash.Hash32,配合 io.Copy 即可流式处理;需要进度控制时也能复用缓冲区手动分块。501 收藏 -
Go crypto/rand.Text 当前通常返回 26 个 Base32 字符,但官方只保证至少 128 位随机性并允许未来变长。本文解释长度来源、API 边界和固定长度令牌的显式编码方案。501 收藏 -
围绕 Go 日志管线说明 strings.ToValidUTF8 的正确边界:哪些自由文本适合替换、哪些字段必须拒绝或留存原始字节,以及它与脱敏、控制字符处理和字符集转码的区别。501 收藏 -
解释 Go tls.GetCertificate 在空 ServerName 场景下不触发的原因,拆解 Certificates、SNI 与默认证书回调的选择边界。501 收藏 -
Go database/sql 查询可空字符串时,使用 sql.NullString 同时保留 String 与 Valid,区分数据库 NULL、空字符串和普通文本;本文进一步说明 JSON 输出、写回参数与错误边界。501 收藏 -
围绕 Go database/sql 的事务边界,说明如何区分事务内校验结果与提交后的持久结果,正确处理 Rows、Rollback 和 Commit。501 收藏 -
os.File.ReadAt 返回 io.EOF 不一定代表本次没有数据。关键要先看 n 与 len(buf) 的关系,再决定处理有效字节、接受文件尾部或返回 io.ErrUnexpectedEOF。501 收藏 -
Go 1.23 起,失去引用的 time.After 定时器可以被回收,但高频循环每轮创建 timer 和 channel 仍有分配与调度成本。本文说明 time.After 的适用边界,以及如何用可复用 Timer 配合 Stop、排空和 Reset。501 收藏 -
Golang · Go教程 | 3天前 | Go教程 · 可观测性 · net/http · HTTP客户端 · 请求头注入 http.Client Go RoundTripper HTTP耗时 Transport中间件
本文用一个可复用的自定义 RoundTripper 统一注入调用方请求头,演示如何克隆请求避免污染原对象,并分别记录收到响应头与读完响应体的耗时,同时说明并发安全和响应体关闭边界。500 收藏 -
sync.Map.Range 不是一致快照。本文用并发 Store、Delete 和更新示例解释键集合与键值为什么会变化,并给出需要稳定结果时的快照与加锁方案。500 收藏 -
Go 的 hash.Hash32 与 hash.Hash64 仍通过公共 Hash 接口提供 Sum(b []byte) []byte,同时用 Sum32 和 Sum64 返回数值摘要。本文拆解接口分层、前缀追加语义和字节序选择。499 收藏 -
Go 中 bufio.Scanner 读取长日志时看起来只返回前一部分内容,通常是 token 超过默认缓冲上限后 Scan 停止。本文从 Err 检查、Buffer 配置、字节上限和 Reader 替代方案四个层面给出排查方法。499 收藏 -
Go encoding/json 默认会转义 JSON 字符串中的 HTML 特殊字符。本文用 Encoder.SetEscapeHTML(false) 对比 HTML 嵌入、API、日志和签名文本场景,说明关闭转义的正确边界。499 收藏 -
Go encoding/csv 中把 Reader.Comment 设为 0 就能关闭注释行过滤,让井号开头的文本回到普通 CSV 记录;文章同时说明首次读取前的配置时机、前导空白、Comma 冲突和格式错误边界。499 收藏