Go教程技术文章
-
通过私有可比较键、只含值字段的Metadata快照和返回副本的读取接口,在Go context中传递只读请求标签,并区分缺失、子值遮蔽和共享引用风险。355 收藏 -
请求结束后仍要完成异步任务时,先用 context.WithoutCancel 脱离请求取消,再用 context.WithTimeout 设置独立期限;本文同时说明值传递、取消边界和常见误区。493 收藏 -
用 Go 1.22 之后的 net/http ServeMux 方法模式注册 GET、POST 路由,说明 HEAD 特例、405 响应、匹配优先级和版本兼容边界。347 收藏 -
通过包装Go RoundTripper,在独立Header副本中注入Context追踪标识,保留底层响应与错误,并明确并发、Body和重定向目的端的处理边界。291 收藏 -
Go http.Server 的优雅关闭不是直接调用 Close,而是用 Shutdown 先停止监听、关闭空闲连接,再等待活动请求结束。本文给出带退出信号和超时上下文的最小实现,并说明 ErrServerClosed、超时以及 WebSocket 等长连接边界。483 收藏 -
Go http.Client 的 Timeout 是客户端级兜底,context.WithTimeout 适合控制单次请求。本文用完整示例说明两者边界、超时错误判断、响应体清理和参数选择。475 收藏 -
用 Go net/http/httptrace 观察 DNSStart、DNSDone 与 GotConn 回调,区分真正进入 DNS 阶段、DNS 失败和连接复用导致的无 DNS 回调。298 收藏 -
Go 的 json.RawMessage 适合处理外层结构固定、内层字段动态的 JSON。本文说明怎样先保留未知 payload,再按 kind 延迟解码,并在修改外层字段后通过二次 Marshal 保留原始 JSON 值,同时区分字段缺失、null、空对象和非法 JSON。200 收藏 -
给 Go 结构体实现 MarshalJSON 后,如果方法内部再次对原类型调用 json.Marshal,就会重新命中同一个方法并形成递归。本文用别名类型隔离方法集,再通过匿名结构体合并默认字段与自定义字段,并说明指针接收者、错误返回和字段覆盖的边界。214 收藏 -
用 Go hash/fnv 把稳定字符串映射为分片编号,讲清 FNV-1a、UTF-8 字节、32/64 位选择、取模边界与扩容迁移风险。209 收藏 -
Go json.Decoder 没有单次读取字节数设置。通过 LimitReader 的加一字节预算区分超限,检查尾随内容,并结合 MaxBytesReader 返回明确的HTTP错误。406 收藏 -
用 Go 的 json.Decoder 连续读取多个 JSON 对象,区分 io.EOF 正常结束与格式、类型错误,并给出文件和 HTTP Reader 的接入写法。164 收藏 -
Go 解析 CSV 时,record 下标只能说明字段在当前切片中的位置,不能直接定位原始文件。本文演示如何在 Read 成功后使用 encoding/csv.Reader.FieldPos 获得字段起始行号和字节列号,并结合 ParseError、InputOffset 和下标边界生成可排查的错误信息。171 收藏 -
Go 的 filepath.ToSlash 只负责把当前系统路径分隔符转换成斜杠,适合生成跨平台资源键、归档条目和 URL 风格路径。本文用一个资源清单场景拆开 ToSlash、Clean、path 与 PathEscape 的边界。295 收藏 -
Go 使用 encoding/csv 读取 CSV 时,不要把业务字段写死在 record[0]、record[1] 上。本文从列顺序变化的现象出发,演示如何读取表头、建立列名映射、按列名安全取值,并处理缺失表头、重复表头和记录列数不足等边界。423 收藏