-
Go 客户端响应体读不到,通常不是一个原因:可能请求本身失败、Body 已经被消费、响应按协议没有内容,或读取过程中发生了错误。本文用 net/http 的真实返回关系拆开排查,并给出文本与 JSON 都能复用的读取写法。
-
用 Go netip.ParseAddr 与 Addr.IsPrivate 识别 RFC 1918、RFC 4193 私有地址,处理 IPv4 映射边界,并区分地址分类与安全授权。
-
go doc -ex 会把包或符号关联的可执行示例纳入文档输出,适合快速查看示例源码;它不负责运行示例。本文说明 -ex 与默认查询、-src、-cmd 以及 go test 的边界。
-
Go 1.23 起可以用 maps.Keys 获取 map 的键迭代器,再用 range 或 slices.Collect 收集成切片;如果输出必须稳定,还要显式排序,因为 map 键的迭代顺序没有保证。
-
Go 的 httptest.ResponseRecorder 可以在不监听真实端口的情况下记录 handler 响应。本文从请求构造、结果读取到状态码、响应头和 JSON Body 断言,整理一套可直接放进 go test 的写法,并说明它与 NewServer 的边界。
-
errors.Is 匹配不到自定义包装错误,通常不是错误消息不一致,而是包装类型没有通过 Unwrap 暴露内部原因,或创建包装时使用了 %v。本文用错误树、单错误 Unwrap、多错误 Unwrap 和自定义 Is 方法梳理排查与设计边界。
-
Go 的 len(string) 统计的是 UTF-8 字节数,不等于中文字符数量。本文用 utf8.RuneCountInString 统计 rune 数量,并说明非法编码、emoji 组合序列和显示字符之间的边界。
-
时间格式化只展示部分墙上时钟信息,time.Time.Equal 比较的是时间瞬间;两个值都带单调时钟读数时,还可能按单调读数比较。本文解释相同文本却返回 false 的原因,以及 Round(0)、UTC、Parse 和 Equal 的正确边界。
-
Go json.Encoder 默认会把 JSON 字符串中的 HTML 相关字符转成 Unicode 转义,SetEscapeHTML(false) 可在非 HTML 场景恢复可读输出。本文对比两种文本表示,解释安全边界、Encoder 与 Marshal 的区别以及 Encode 末尾换行。
-
以文件摘要场景比较os.ReadFile和os.Open,解释全文切片、流式读取、固定缓冲、部分读取错误与资源关闭,避免换用Open后仍保留全部数据。
-
Go 的 http.Request.GetBody 是重新取得请求体的可选工厂。本文说明 NewRequest 的自动设置边界、手动补齐方式,以及再次调用 Client.Do 前怎样替换 Body。
-
Go 1.27 为多个底层工具加入 @file response file 解析。本文用 go tool compile 的最小示例说明参数文件的支持范围、空白与引号规则、版本边界,以及为什么它不是 go build 的通用参数替代品。
-
Go net/http 的 Response.Uncompressed 为 true 时,表示 Transport 已把服务器返回的压缩响应透明解压。本文说明触发条件、字段变化、最小判断代码,以及如何用 DisableCompression 保留原始压缩响应。
-
Go json.Decoder.InputOffset 返回的是最近成功返回 token 之后的输入字节偏移。本文用连续 JSON 流示例说明它与 SyntaxError.Offset、Buffered 的区别,并演示如何把字节位置转换为行列诊断信息。
-
Go encoding/base64.AppendEncode 会把 Base64 结果追加到已有字节切片并返回扩展后的切片。本文说明 dst 前缀、EncodedLen 容量预留,以及 StdEncoding、RawStdEncoding 和 URLEncoding 的选择边界。