Go教程技术文章
-
Go 的 time.Parse 不能用一个 layout 自动吞掉可选时区。本文按日志形状分流:显式时区用 time.Parse,缺少时区用 time.ParseInLocation,并说明如何统一比较与落库。271 收藏 -
用 time.NewTimer 和单 goroutine 事件循环实现可重置的空闲超时,讲清 Reset 前排空、Go 1.23 语义变化,以及 time.After、AfterFunc 的选择边界。219 收藏 -
用 Go 的 time.Ticker 配合 context 和 select 驱动周期任务,讲清慢任务下 tick 的处理、Stop 不关闭 channel 的语义,以及退出时等待 Goroutine 收尾的写法。371 收藏 -
Go encoding/json 会对可编码 map 的键排序,适合在同一编码路径中生成稳定 JSON 字节用于签名测试;跨语言签名还需另行约定数字、转义和规范化规则。322 收藏 -
用 priorityRank 把业务优先级映射成整数,再让 slices.SortFunc 按优先级、时间和 ID 排序结构体切片;同时说明未知优先级、严格弱序、稳定排序和 IsSortedFunc 检查。336 收藏 -
Go 里用 sort.SliceStable 按多个字段排序时,比较器要按优先级逐层比较,所有字段相等则返回 false,稳定性才能保留原始顺序。190 收藏 -
用 bytes.Buffer 解析批量协议时,Reset 可以复用已分配容量,但不会替你维护消息边界。本文用固定长度前缀示例说明读取推进、半包判断、Bytes 切片生命周期和复用检查清单。128 收藏 -
用 strings.Builder 拼接大量片段时,按字节数估算 Grow 容量,按输入类型选择 WriteString、Write、WriteByte 或 WriteRune,并避开 []byte 到 string 的多余转换与非零 Builder 复制。355 收藏 -
高频日志过滤不要在每条日志到来时重新解析正则。本文用一个小型过滤器演示 regexp.Compile 的初始化时机、*regexp.Regexp 的并发复用,以及动态改规则时如何隔离可变配置。447 收藏 -
用 SyntaxError、UnmarshalTypeError 和 Decoder.InputOffset 区分 JSON 错误口径,并把字节偏移、字段路径、原始片段和业务记录写进可检索日志。152 收藏 -
Go 接口遇到同一字段有时返回字符串、有时返回数字时,可以为局部类型实现 UnmarshalJSON。本文用 json.RawMessage 区分输入形态,说明别名类型、null、空字符串与非法值的处理边界。281 收藏 -
当同一个 JSON 接口的内部字段会随 kind 改变时,可以先用 json.RawMessage 保留 payload,再按判别字段选择具体结构体二次解析。本文给出可复用的 Go 分层解析写法,并说明未知类型、空载荷和错误处理边界。340 收藏 -
Go encoding/xml 解析重复的同名节点时用切片接收,遇到多层 XML 则用结构体嵌套或 a>b 标签路径表达层级。本文用一个订单 XML 说明标签映射、列表顺序、未知节点和最小验证。343 收藏 -
用 Go text/template 的命名模板和 ExecuteTemplate,让同一个 Report 数据对象输出纯文本与 Markdown,并说明 define、Parse、字段路径和 html/template 的边界。344 收藏 -
用 Go embed 把默认 YAML 配置和 HTML 模板打进二进制,配合 fs.Sub、template.ParseFS 与外部配置覆盖,解决部署时漏带资源和路径写错的问题。180 收藏