Go语言技术文章
-
用 priorityRank 把业务优先级映射成整数,再让 slices.SortFunc 按优先级、时间和 ID 排序结构体切片;同时说明未知优先级、严格弱序、稳定排序和 IsSortedFunc 检查。336 收藏 -
Go 的 *string 字段在 JSON 缺失和显式 null 时都可能得到 nil,无法直接表达 PATCH 接口的三态语义。本文用自定义 UnmarshalJSON 类型保留字段是否出现、是否为 null 以及具体值,并说明复用结构体时的常见误判。315 收藏 -
Go 里用 sort.SliceStable 按多个字段排序时,比较器要按优先级逐层比较,所有字段相等则返回 false,稳定性才能保留原始顺序。190 收藏 -
Go 的 url.QueryUnescape 把加号解成空格是查询编码规则,不是字符串损坏。本文用对比例子说明查询参数、路径文本、QueryEscape 和错误处理应该如何配套使用。116 收藏 -
用 bytes.Buffer 解析批量协议时,Reset 可以复用已分配容量,但不会替你维护消息边界。本文用固定长度前缀示例说明读取推进、半包判断、Bytes 切片生命周期和复用检查清单。128 收藏 -
Go 的 URL.Path 保存解码后的路径,RawPath 只用于保留有效的原始编码提示;如果把已编码字符串直接放进 Path,URL.String 或 HTTP 客户端会再次转义百分号,形成 %252F。493 收藏 -
用 strings.Builder 拼接大量片段时,按字节数估算 Grow 容量,按输入类型选择 WriteString、Write、WriteByte 或 WriteRune,并避开 []byte 到 string 的多余转换与非零 Builder 复制。355 收藏 -
Go 的 HTTP 响应头必须在第一次 WriteHeader 或 Write 之前设置;本文用 handler 分支说明隐式 200、最终状态码、http.Error 与 trailer 的边界。424 收藏 -
高频日志过滤不要在每条日志到来时重新解析正则。本文用一个小型过滤器演示 regexp.Compile 的初始化时机、*regexp.Regexp 的并发复用,以及动态改规则时如何隔离可变配置。447 收藏 -
ReadHeaderTimeout 保护请求头读取,WriteTimeout 限制响应写回,IdleTimeout 只管理 keep-alive 连接等待下一请求。本文按请求阶段比较三者的边界、重置规则和回退关系,并给出普通接口、慢上传与长响应的配置判断方法。266 收藏 -
用 SyntaxError、UnmarshalTypeError 和 Decoder.InputOffset 区分 JSON 错误口径,并把字节偏移、字段路径、原始片段和业务记录写进可检索日志。152 收藏 -
解释 Go HTTP 客户端总超时与 Transport 阶段超时的覆盖范围,说明 DNS、TCP、TLS、响应头和响应体分别该由什么配置控制。499 收藏 -
Go 接口遇到同一字段有时返回字符串、有时返回数字时,可以为局部类型实现 UnmarshalJSON。本文用 json.RawMessage 区分输入形态,说明别名类型、null、空字符串与非法值的处理边界。281 收藏 -
Go 的 http.Client 返回响应后,Response.Body 不读取、不关闭,或每次新建 Client,都可能让 Transport 无法复用持久连接。本文用原创示例拆开 Body 生命周期、读取策略和连接池排查方法。489 收藏 -
当同一个 JSON 接口的内部字段会随 kind 改变时,可以先用 json.RawMessage 保留 payload,再按判别字段选择具体结构体二次解析。本文给出可复用的 Go 分层解析写法,并说明未知类型、空载荷和错误处理边界。340 收藏