Go问答技术文章
-
Go 的 encoding/json 解码到 *T 时,字段缺省和显式 null 都可能得到 nil,单靠指针无法区分。本文用 RawMessage 和泛型 Optional 保存字段是否出现、是否为 null 以及实际值,帮助接口更新和默认值处理避免语义丢失。334 收藏 -
Go 的默认 JSON 解码会忽略结构体没有声明的字段。本文用 DisallowUnknownFields 让未知字段直接返回错误,并说明错误处理、兼容期和嵌套结构的边界。134 收藏 -
Go 的 math.Ilogb 返回浮点数的二进制整数指数,不是普通的 Log2 结果。本文从 2 的幂、非整数幂和 Frexp 对比入手,解释零、无穷大、NaN 的特殊返回值,并给出选择函数和封装边界。123 收藏 -
Go 的 url.Values.Encode 将查询参数中的空格编码为加号是正常的表单编码语义;本文用最小示例区分空格、字面加号和路径片段,给出解码回路与请求构造边界。100 收藏 -
Go Request.GetBody 为 nil 时,先区分重定向重放和应用层重试,再用可重复创建 Body 的请求工厂保证每次上传读取同一份数据。122 收藏 -
Go 的 math.Float32frombits 是按 IEEE 754 位模式把 uint32 重解释为 float32,不等同于 float32(x) 的数值转换。本文用对比代码说明两者差异,并给出按字节序组装输入、处理特殊值和保持可逆性的实用边界。431 收藏 -
http.Client.Timeout 的零值表示不设总超时,因此请求可能一直等待连接、响应头或响应体。本文用一个可解释的请求预算说明根因、修复写法和阶段边界。144 收藏 -
Go http.Server.Shutdown 一直等待时,不要先改成 Close。先用 ConnState 找到仍在处理请求的连接,再给 Shutdown 加超时,并单独处理 WebSocket 等 hijacked 连接。126 收藏 -
用 Go list -m all 查看当前模块构建中实际参与选择的依赖版本,并结合 -json、-f、-u 识别替换模块、间接依赖和可用升级。234 收藏 -
Go http.Server.ReadHeaderTimeout 用于限制请求头读取时间,适合收敛迟迟发不完整请求头的连接。本文给出显式 Server 配置、超时字段边界、慢请求验证方法,以及 ReadTimeout、WriteTimeout、IdleTimeout 和 MaxHeaderBytes 的配合清单。437 收藏 -
Go httptrace.ClientTrace 可以把一次 HTTP 客户端请求拆成 DNS 查询、连接建立和连接复用等观测阶段。本文解释 DNSStart/DNSDone 与 ConnectStart/ConnectDone 的计时边界,并给出并发安全的请求级记录方式。224 收藏 -
Go embed 读不到文件时,先区分空的 embed.FS、相对包目录错误和目录模式排除隐藏文件。本文用最小示例说明指令位置、变量类型、all: 前缀与 go list 检查边界。247 收藏 -
Go filepath 使用目标操作系统的路径规则。本文区分构建宿主和目标产物,给出路径观察示例,并说明 GOOS、GOARCH、构建约束与文件路径、URL 路径的处理边界。205 收藏 -
Go 将 CGO_ENABLED 设为 0 后,报错不一定来自链接阶段。本文按文件选择、编译和链接三层拆分现象,使用 go env 与 go list 判断 cgo 文件是否被排除,再根据外部符号、目标平台和预编译库选择修复方向。462 收藏 -
Go cgo 报 pkg-config 找不到系统库时,先区分工具、.pc 元数据、头文件和链接器问题,再用 PKG_CONFIG_PATH、模块名与构建环境逐层排查。383 收藏