Go问答技术文章
-
Go encoding/json 遇到 NaN、+Inf 或 -Inf 时会返回 UnsupportedValueError。本文用最小示例区分错误类型,并给出序列化边界的有限浮点检查与业务取值方案。324 收藏 -
Go encoding/asn1 的字段标签不能直接作用于顶层值。本文用 MarshalWithParams 添加 tag:3,explicit,说明显式包装与字段标签的区别,并用对称参数完成编解码和尾部检查。324 收藏 -
用 Go httptrace.GotFirstResponseByte 记录响应头首字节延迟,区分服务端等待、响应体读取和 HTTP/2 不适用边界。323 收藏 -
Go regexp.Compile 失败时,关键不是把错误吞掉,而是把正则来源、配置字段和底层语法错误一起带回启动流程。本文结合 MustCompile 的适用边界,给出代码常量、环境变量和配置文件的选择方法。323 收藏 -
Go pprof 里找不到一个很短的函数,不一定代表它没有执行。CPU profile 记录的是离散采样时刻的活跃调用栈,短函数可能因命中次数少而没有独立排名。本文从 flat、cum、采样窗口、源码定位和 profile 类型五个角度给出排查流程。323 收藏 -
Go把JSON数字解码到通用接口时通常使用float64,部分大整数因此发生舍入。本文结合导入标识场景,比较UseNumber、int64字段和字符串契约,并说明范围错误、上游精度丢失与跨服务迁移的处理方法。323 收藏 -
Go 的 json.Decoder 默认会忽略结构体没有声明的 JSON 字段。本文用 DisallowUnknownFields 在请求解码阶段拒绝多余字段,给出可复用的 400 错误处理、尾随 JSON 检查和接口兼容边界。323 收藏 -
解释Ticker重置后立即执行的常见原因,区分新旧通道语义、已接收通知与排队任务,并提供单协程管理周期更新、取消和错误处理的示例。323 收藏 -
Go AST 中 ImportSpec.Name 为 nil 通常不是解析失败,而是源码没有显式本地包名。本文拆解普通导入、别名导入、点导入和空白导入的差异,说明为什么不能把导入路径末段直接当成真实包名,并给出安全的 AST 读取与 go/types 语义层选择方法。323 收藏 -
Go x/text/search 的匹配规则可以按语言处理大小写、重音和宽度,但 IndexString 返回的 start/end 仍应按原始 UTF-8 字节偏移使用。本文说明如何切取原文,并安全转换为 rune 下标。322 收藏 -
Go x/text/collate 的 IgnoreCase 只负责大小写比较权重,不会自动忽略重音、全半角、语言规则或数值差异。本文用 CompareString、Option 组合和检查表说明如何选择。322 收藏 -
Go encoding/csv 默认按较严格的 CSV 引号规则解析。本文说明 Reader.LazyQuotes 放宽的两类引号错误、开启时机、ParseError 处理方式,以及为什么容错读取不能替代下游数据质量控制。322 收藏 -
Go 的 mime.WordDecoder.Decode 专门解码一个 RFC 2047 encoded-word。本文用最小示例说明 UTF-8、CharsetReader、错误处理,以及它与 DecodeHeader 的输入边界。322 收藏 -
Go defer 会立即求值并保存函数值、接收者和参数,延迟执行函数体。通过日志、耗时、切片和文件关闭示例,说明如何选择入口快照、最终状态与资源绑定。322 收藏 -
Go ast.FilterDecl 不会筛选参数列表中的名称。本文通过最小示例说明其声明过滤范围、原地修改与返回值含义,并区分签名展示和源码参数重命名所需的处理方式。322 收藏