Go问答技术文章
-
说明 bbolt Get 返回值的事务有效期,给出事务内复制的读取接口,并区分键缺失、空值及错误,明确缓存和异步任务的数据持有边界。224 收藏 -
以共享前缀声明为例,比较 Participle 有限前瞻与语法重写在 AST 兼容、字段归属和错误诊断上的取舍,区分真正歧义及左递归问题。426 收藏 -
Participle 的 Elide 会让注释令牌跳过普通语法匹配,因此它们不会自动成为 AST 字段。本文从实际选型出发,对比 Tokens 元数据、显式捕获和语义注释三种保留方式。198 收藏 -
Participle 内部使用带回溯的递归下降解析器,左递归会让同一产生式在消费输入前再次调用自己。本文用表达式 AST 说明原因,并给出 Primary 加 Tail 的改写方式。240 收藏 -
解释 Go Goldmark 中普通回车、显式硬换行和 WithHardWraps 的渲染差异,并给出中文文本选择 LineBreakStrategy 的判断方法。161 收藏 -
Goldmark 的 Markdown 实例可以长期复用,但 parser.Context 是单次解析的可变状态。本文从第二次转换异常的场景出发,说明状态残留的根因、修复写法与并发边界。252 收藏 -
Go Goldmark 默认不渲染 Markdown 中的原始 HTML,原因在 HTML renderer 的安全选项。本文说明 html.WithUnsafe 的职责、受信任模板的配置方式,以及不可信内容为什么不能直接开启。372 收藏 -
解释Go SJSON原地替换的字节长度条件、len与cap差异及返回切片所有权,给出独立输入示例和可复现分配基准,避免把成功替换误当成零分配。473 收藏 -
Go SJSON 追加数组元素时,路径末尾使用 -1,例如 items.-1。本文拆开说明它与具体下标、越过数组末尾和数字对象键的区别,并给出可直接改写 JSON 的示例。408 收藏 -
Go SJSON 的 Set 会把 Go 值按 JSON 规则编码,SetRaw 则直接写入原始 JSON 片段。本文用数字、字符串、数组和对象示例说明两者的类型边界,并给出动态 raw 输入的校验方案。107 收藏 -
GJSON 的 Float() 返回 float64,大于 2^53 的整数不能都被浮点数精确表示。本文对比 Result.Raw、String、Float、Int 和 Uint,说明订单号、用户 ID 等大整数应该怎样读取。243 收藏 -
Go GJSON 的数组条件查询中,#(...) 取第一个匹配项,#(...)# 才会收集全部匹配项。本文用同一份数据对比两种路径的返回形态、Go 代码读取方式、空结果边界和接口设计取舍。242 收藏 -
GJSON 的 Exists 判断字段是否存在,空字符串判断的是字符串内容;缺失、null、空串和非空串并不是同一种状态。本文用一段最小 Go 示例说明四种状态的差异,并给出输入校验与审计时的选择方式。380 收藏 -
Colly 的 OnError 同时可能面对传输层失败、非 2xx HTTP 响应和解析回调错误。本文用 Response、StatusCode、errors.As 与 ParseHTTPErrorResponse 说明如何分类,并把判断接到日志、重试和异步收尾。485 收藏 -
Go Colly 默认会记录已经访问过的 URL,所以同一个地址第二次 Visit 常见返回 ErrAlreadyVisited。本文从复现、允许重复访问、分页参数和重试边界说明怎样处理,避免用全局开关掩盖请求设计问题。482 收藏