Go问答技术文章
-
区分Go http.Client.Timeout与Transport阶段超时,明确拨号、TLS、响应头、响应体和业务代码的时间边界。484 收藏 -
调用泛型函数时,只要普通实参或明确的目标函数类型能唯一推断缺失类型参数,通常可以省略;类型参数只出现在结果中、函数值没有目标类型、nil 等实参不提供类型信息时,就要显式填写。泛型类型则始终需要显式类型实参。484 收藏 -
Timer Reset 后立刻超时,通常与旧版缓冲计时器通道中的过期值有关。本文对照 Go 1.23 前后语义,给出 chan-based Timer 的复用写法、AfterFunc 边界、版本判断和回退检查清单。484 收藏 -
用一个共享 map 的最小测试复现 Go 并发读写竞态,说明 go test -race 的触发边界,并用 sync.RWMutex 收拢修复方案。483 收藏 -
解释 Go //go:embed 为什么在目录递归时排除以点号或下划线开头的文件,比较目录名、当前层通配符与 all: 前缀的差异,并给出精确嵌入、结果检查和安全边界。483 收藏 -
Go heap 默认存活视图可能看不到已回收的短命对象。切换 alloc_space、alloc_objects,并结合业务观察窗口、MemProfileRate 与实际堆分配,区分分配压力和存活容量,避免误判泄漏或盲目提高采样精度。483 收藏 -
用 Go hash.Hash 和固定缓冲区流式计算文件摘要,覆盖部分读取、EOF、真实 I/O 错误、资源关闭与摘要输出边界。482 收藏 -
在文件节点返回 fs.SkipDir 会跳过父目录剩余条目,fs.SkipAll 则停止整棵树。本文用对照表和代码说明安全选择边界。482 收藏 -
Go Colly 默认会记录已经访问过的 URL,所以同一个地址第二次 Visit 常见返回 ErrAlreadyVisited。本文从复现、允许重复访问、分页参数和重试边界说明怎样处理,避免用全局开关掩盖请求设计问题。482 收藏 -
高频循环里反复调用time.After会让计时器无法主动取消。本文用可复用的time.NewTimer演示Stop、排空、Reset和退出清理,并说明Go 1.23前后的Timer语义差异。481 收藏 -
Go net.Resolver 的自定义超时要分成两层:调用 LookupIPAddr 时用 context.WithTimeout 限制整次解析,Resolver.Dial 内部再用 net.Dialer.DialContext 约束连接 DNS 服务的时间。本文给出可复用代码,并说明 PreferGo、StrictErrors、UDP/TCP 与错误判断边界。481 收藏 -
pkg.go.dev API 的 latest 代表索引已识别的最新模块版本,不等于仓库默认分支或任意 Git 标签。本文从语义化标签、子模块前缀、主版本路径和索引传播四层排查差异,并给出最小验证命令。481 收藏 -
database/sql 扫描 SQL NULL 时,普通 string、int 字段无法表达空值语义。本文从扫描失败现场入手,分别使用 sql.Null* 与 Go 1.22 的 sql.Null[T],再把数据库 DTO 转换为业务结构体,给出单行、批量查询和写回数据库的稳定做法。481 收藏 -
Go AddDate 按业务时区增加日历日,Add 增加固定时长。用完整示例比较钟表字段、UTC 偏移和实际间隔,解释跨夏令时的差异及不存在或重复时刻的边界。481 收藏 -
用 Go testing.T TempDir 创建独立目录,说明 Setenv 与并行子测试的边界,并给出串行环境注入和并行显式传参两种测试方案。480 收藏