Go教程技术文章
-
Go bufio.Reader 读取协议行时,ReadString 和 ReadBytes 会保留分隔符,ReadLine 会去掉行尾,ReadSlice 还涉及缓冲区生命周期。本文从排查现象出发,给出保留 LF、CRLF 和自定义分隔符的写法。501 收藏 -
Go 的 http.Request.PathValue 为空,通常不是参数丢了,而是请求没有经过包含命名通配符的 ServeMux 匹配,或测试中的通配符名称不一致。本文从匹配链路、最小实现、httptest 和 SetPathValue 四个场景说明排查与修复方式。501 收藏 -
Go 1.23 起可用 slices.Backward 按降序索引反向遍历切片,无需复制或改变元素顺序。本文给出最小写法、提前停止、索引写回、结构体值语义、空切片和旧版本兼容示例。501 收藏 -
Go 计算大文件 CRC-32 不必先读完整文件。crc32.New 返回可持续写入的 hash.Hash32,配合 io.Copy 即可流式处理;需要进度控制时也能复用缓冲区手动分块。501 收藏 -
Go database/sql 查询可空字符串时,使用 sql.NullString 同时保留 String 与 Valid,区分数据库 NULL、空字符串和普通文本;本文进一步说明 JSON 输出、写回参数与错误边界。501 收藏 -
os.File.ReadAt 返回 io.EOF 不一定代表本次没有数据。关键要先看 n 与 len(buf) 的关系,再决定处理有效字节、接受文件尾部或返回 io.ErrUnexpectedEOF。501 收藏 -
Go strconv.ParseFloat 可以解析 NaN、Inf 和 Infinity,但 NaN、正负无穷与普通数字溢出并不是一回事。本文用 math.IsNaN、math.IsInf 和 ErrRange 给出清晰的分类方式。501 收藏 -
Go maps.Clone 只做浅克隆:本文用顶层 map、嵌套 map、切片和指针说明哪些数据独立、哪些仍会共享,并给出按 value 类型选择复制策略的实战判断。501 收藏 -
Go 1.22 引入的 base64.Encoding.AppendEncode 会把编码结果追加到已有 dst,而不是要求调用方先单独分配输出切片。本文用请求令牌拼接场景拆开 dst 前缀、EncodedLen 容量预估、append 扩容和输入边界,给出可核对的最小写法。501 收藏 -
Golang · Go教程 | 2星期前 | Go教程 · 可观测性 · net/http · HTTP客户端 · 请求头注入 http.Client Go RoundTripper HTTP耗时 Transport中间件
本文用一个可复用的自定义 RoundTripper 统一注入调用方请求头,演示如何克隆请求避免污染原对象,并分别记录收到响应头与读完响应体的耗时,同时说明并发安全和响应体关闭边界。500 收藏 -
sync.Map.Range 不是一致快照。本文用并发 Store、Delete 和更新示例解释键集合与键值为什么会变化,并给出需要稳定结果时的快照与加锁方案。500 收藏 -
用 Go log/slog 自定义 Handler,为健康检查、普通请求和故障请求设置不同日志门槛,同时保留 request_id 等关键上下文,避免线上日志降噪后失去排查线索。500 收藏 -
Go 服务部署到容器后,日志时间常常从本地时间变成 UTC。本文拆开 time.Time 的位置、time.LoadLocation 的加载方式和 JSON 序列化边界,给出一套可回归验证的处理方案。500 收藏 -
以一个短帧解析器为例,按空输入、短头、合法帧和长度边界选择精简种子,使用 F.Add 与性质断言发现错误,并区分日常种子回归、有界 fuzz 探索和失败样本最小化。499 收藏 -
Go 泛型排序函数应使用 cmp.Ordered 表达可用的有序类型集合。本文从约束边界、命名类型、不可排序类型和浮点 NaN 语义入手,给出可复用写法与选型清单。499 收藏