Go问答技术文章
-
解释 weak.Pointer.Value 返回 nil 的正常回收语义,区分共享引用容器与目标字段的数据竞争,并给出锁、KeepAlive 和 race detector 的排查写法。153 收藏 -
big.Int.SetString 的 base=0 会根据 0b、0o、0 或 0x 前缀选择实际进制;显式 base 则按固定进制读取文本。本文用 Go 示例区分两种模式、失败返回值和下划线边界。151 收藏 -
Go 的 http.Server.ErrorLog 专门接收连接接收失败、Handler 异常行为和底层文件系统错误。本文按工作流说明如何创建自定义 log.Logger、注入 Server、理解 nil 默认行为,并区分它与业务访问日志。151 收藏 -
Go 1.16 将 io/ioutil 的能力分散到 io 和 os。本文按函数职责整理 ReadFile、ReadDir、ReadAll、临时文件等迁移方式,并说明 DirEntry 与 FileInfo 的兼容边界。151 收藏 -
接口断言成功只说明当前动态类型满足目标类型,不能证明 type switch 已覆盖全部输入。本文用 Go 示例定位遗漏 case,并补上 default 兜底和表格测试。149 收藏 -
goquery 的 Text 会递归读取选中节点及其后代文本节点,所以父元素中的标题、段落和嵌套标签文字都会被合并。本文说明它的实现语义、常见误解和可控提取方式。148 收藏 -
PATH 是多个路径组成的列表,不能用 filepath.Split 当作单一路径处理。本文对比 ListSeparator 与 Separator,说明 Go 中如何跨平台拆分 PATH,以及空输入、清理和绝对化的边界。143 收藏 -
并行基准测试不能把 RunParallel 回调里的 PB.Next 直接替换成 B.Loop。本文区分普通基准循环与并行工作分配,给出 B.Loop 迁移范围、RunParallel 正确写法、计时器边界和 Go 版本兼容检查。142 收藏 -
Go embed FS 资源加载失败时,保留逻辑资源名、失败阶段与底层错误链。小项目区分非法路径、资源不存在和模板解析错误,说明 ValidPath 不保证存在。141 收藏 -
Go 的 gzip.Reader 默认会连续读取拼接的 gzip 成员。本文用原创示例拆开 Multistream、Reset、io.ByteReader、EOF 与尾随数据的边界,帮助你选择整体解压或按成员处理。140 收藏 -
Go 接口只有动态类型和动态值同时为空时才等于 nil。把值为 nil 的具体指针返回给 error,会让接口携带该指针类型,从而出现 err != nil。本文用最小示例说明原因、观察方法和正确修复方式。140 收藏 -
Go 的 gzip 压缩级别是在 CPU 消耗、响应体大小和端到端延迟之间做取舍。本文用 NewWriterLevel 比较级别,并给出 HTTP Handler 中的配置、Close、Flush 与 Writer 复用注意事项。136 收藏 -
Go 的 interface 类型可以比较,但其中保存的动态值不一定可比较。本文从 panic 现场解释 slice、map、func 等类型为何触发运行时错误,并给出 reflect.Value.Comparable、类型断言和业务键比较的安全方案。136 收藏 -
Go sqlmock 适合锁定 SQL 调用、参数和事务契约,真实数据库测试则负责发现方言、模式、约束、索引与事务环境问题。本文用一张边界表说明两者各自能发现什么,以及如何组合回归。135 收藏 -
在 Go 的 select 中,把某个分支使用的局部 channel 变量设为 nil,就能让这个通信 case 暂时不可用;恢复为真实 channel 后分支重新参与选择。本文比较 nil、关闭 channel 和 default 的语义与使用边界。133 收藏