Go语言技术文章
-
Go 处理跨夏令时的日期范围时,不要把一天硬编码成 24 小时。本文用 time.Location 绑定 IANA 时区,以左闭右开方式构造本地日期边界,并说明 AddDate 与 Duration 的使用区别。485 收藏 -
Go 的 time.Parse 不使用 yyyy-MM-dd 这类占位符,而是用 2006-01-02 这组参考时间。本文从最小修复、错误判断、时区和格式化几个方面说明如何排查日期解析失败。233 收藏 -
Go 的 time.Parse 不能用一个 layout 自动吞掉可选时区。本文按日志形状分流:显式时区用 time.Parse,缺少时区用 time.ParseInLocation,并说明如何统一比较与落库。271 收藏 -
Go 的 time.Time 默认通过 MarshalJSON 输出 RFC3339 字符串,时区表现为 Z 或数值偏移,纳秒来自原始时间值。本文说明如何理解默认结果,并用 Format 明确控制 API 的时区与精度。487 收藏 -
用 time.NewTimer 和单 goroutine 事件循环实现可重置的空闲超时,讲清 Reset 前排空、Go 1.23 语义变化,以及 time.After、AfterFunc 的选择边界。219 收藏 -
Go 的 json omitempty 不会按传统规则省略结构体值字段。本文用最小示例说明值字段、指针字段和未提供状态的区别。409 收藏 -
用 Go 的 time.Ticker 配合 context 和 select 驱动周期任务,讲清慢任务下 tick 的处理、Stop 不关闭 channel 的语义,以及退出时等待 Goroutine 收尾的写法。371 收藏 -
Go 将 JSON 解码到 any 时会默认使用 float64,大整数超过双精度可精确表示范围后可能被改写。本文用复现、UseNumber 和明确整数类型说明如何保留精度。321 收藏 -
Go encoding/json 会对可编码 map 的键排序,适合在同一编码路径中生成稳定 JSON 字节用于签名测试;跨语言签名还需另行约定数字、转义和规范化规则。322 收藏 -
json.Decoder 面向输入流读取下一个顶层 JSON 值,所以多个值可以连续 Decode。本文解释这种设计,并给出严格单值校验和流式读取的实用写法。118 收藏 -
用 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 收藏