Go问答技术文章
-
讲清 Go 字符串中无效 UTF-8 字节的识别与替换:ValidString、ToValidUTF8、RuneError 与 width=1 的区别,以及拒绝、替换、删除和保留证据的适用边界。199 收藏 -
Go 中 json.Valid 通过并不代表 json.Unmarshal 一定成功。本文从语法有效、目标类型匹配和目标参数合法三个层次,说明如何用错误类型、字段路径和偏移量定位解码失败。199 收藏 -
Go 正则遇到非法 UTF-8 字节时不会自动报错,而是按 utf8.RuneError 解释输入。本文从匹配现象、编码策略和字节索引三个边界说明如何定位问题,并给出严格拒绝与规范化的 Go 写法。199 收藏 -
Go defer 不能凭空改写普通返回表达式。本文对比命名返回值、指针和闭包的作用范围,说明 return 与 defer 的执行关系,并给出错误包装和资源清理的选择边界。198 收藏 -
Go 1.20 引入 errors.Join 后,一个返回值可以同时携带多个错误。只要使用 errors.Is 检查哨兵错误,匹配仍会沿着多子错误树继续进行;关键是区分结构化匹配、文本展示和 nil 过滤。198 收藏 -
解释 Go select 多个通信同时就绪时为什么不能依赖 case 顺序,区分源码求值、伪随机选择、default 和显式优先级策略。198 收藏 -
从包级变量的依赖分析、声明顺序和 init 函数边界入手,给出用最小运行标记与 go/types.InitOrder 确认 Go 初始化先后的方法,并说明多文件与隐藏依赖的限制。198 收藏 -
Participle 的 Elide 会让注释令牌跳过普通语法匹配,因此它们不会自动成为 AST 字段。本文从实际选型出发,对比 Tokens 元数据、显式捕获和语义注释三种保留方式。198 收藏 -
bytes.Buffer.AvailableBuffer 返回的不是可长期持有的普通切片,而是给下一次 Buffer.Write 准备的可追加空间。本文用最小示例说明 Append、Write、Bytes 之间的边界,以及何时必须复制数据。197 收藏 -
Go 反射中,reflect.Value.IsZero 可直接判断有效值是否为类型零值,不要求切片、映射和函数可比较。本文区分无效 Value、nil 容器、空容器与接口比较 panic,并说明何时使用 Comparable 或 DeepEqual。197 收藏 -
讲清 Go testing.T.Parallel 的暂停边界,示范如何隔离表驱动子测试的切片、map、结果和临时资源,并用 -race 与 -count 排查共享状态污染。197 收藏 -
解释 Go net/http ResponseController.Flush 返回 ErrNotSupported 的原因,拆解 ResponseWriter 包装、Unwrap、FlushError 和代理缓冲边界。197 收藏 -
Go debug/dwarf.Reader.SkipChildren 只在不需要读取当前 Entry 后代时调用。本文用 Entry 树、Children 标记和 Tag 0 说明剪枝位置,并给出完整遍历与选择性遍历的判断表。197 收藏 -
Go 类型断言返回 ok=true 只说明接口的动态类型匹配,断言出的指针仍可能为 nil。本文给出双重判断、反射边界、源头修复和回归测试写法。197 收藏 -
Go text/template 执行成功但页面为空,通常不是 Execute 没运行,而是写入目标、模板入口、数据字段或空值分支出了偏差。本文给出从输出长度到 ExecuteTemplate 的排查顺序。197 收藏