Go问答技术文章
-
Go 泛型约束里的 ~string、~int 表示一组底层类型相同的类型集合。本文用自定义类型和组合约束说明波浪线与精确类型项的区别,以及如何选择约束边界。459 收藏 -
Go 的 Server.Shutdown 会等待活动连接回到空闲状态;如果请求、上游调用或长连接没有按预期结束,就会在上下文到期时返回超时。本文按负载、时间预算和连接类型拆解排查与修复方法。459 收藏 -
Go 项目存在 vendor 目录却在构建时找不到模块,通常与主模块根目录、go.mod 版本条件、vendor/modules.txt 不一致或依赖未被收集有关。本文给出从定位主模块到选择 -mod 模式的排查路径。459 收藏 -
夏令时回拨会让同一个本地时钟读数出现两次。本文解释 Go time.Date 为什么不保证选择哪一次,并给出用显式 UTC 偏移消歧、保存和展示时间的实用写法。459 收藏 -
Go log/slog 的 WithGroup 会为 Logger 的后续属性建立命名空间。本文用 TextHandler 与 JSONHandler 对比嵌套字段、说明空组行为,并给出子系统日志的组织方式。459 收藏 -
Go 表驱动测试调用 t.Parallel 后,子测试可能在外层循环继续修改变量时才真正执行。本文从调度语义、Go 1.22 循环变量规则和指针切片共享边界说明原因,并给出兼容旧模块的修复写法。459 收藏 -
time.Time 的 Equal 比较时间点,== 还会比较 Location 和单调时钟读数。本文用可运行示例拆开两者的边界,并说明 Round(0)、UTC 与序列化后的差异。458 收藏 -
Go 的 http.ResponseController 可以在处理器内设置请求读取和响应写出的截止时间,但它不是整个服务的统一超时开关。本文用两个小场景拆开 Handler、Request.Body、ResponseWriter 与底层连接的调用关系,说明超时后的错误判断、清除方式和常见误区。458 收藏 -
Go 中 recover 只记录 panic 而不改 named result,函数可能在异常后返回 nil 错误。本文用最小示例说明 defer、recover、named result 与 goroutine 边界,给出可复用的错误转换和排查清单。458 收藏 -
Go archive/tar 写入 io.Pipe 后在 Close 阻塞,通常是读端没有持续消费导致的同步背压。本文比较 bytes.Buffer、文件和 io.Pipe 的适用场景,并给出带错误传播与取消处理的流式写法。458 收藏 -
errors.As 的 target 不是普通比较值,而是接收匹配错误的可写槽位。本文用最小实验解释双指针写法、三个 panic 条件、错误树匹配规则,以及新版 errors.AsType 的替代方式。458 收藏 -
Golang · Go问答 | 3星期前 | 并发 · goroutine · go · pprof · 故障排查 · goroutine泄漏 并发排查 Goroutine生命周期 Go pprof runtime metrics
Goroutine 持续上涨不等于立刻报错。本文用运行时指标、双时点堆栈快照和退出协议,定位 channel、I/O、ticker 与重试链路中的泄漏入口。458 收藏 -
Golang · Go问答 | 3星期前 | 并发 · channel · goroutine · go · Context · context 并发限制 工作池 Go channel worker pool Goroutine生命周期
任务总量小且有界时,每任务一个 goroutine 更简单;持续或无界输入、昂贵资源和容量有限的下游,更适合创建前限流或固定工作池。本文给出选择表与可取消实现。458 收藏 -
Go POST 的 GetBody 为空,常与请求构造时的 Reader 类型有关。本文展示内存快照与显式正文工厂,说明 Clone、ContentLength 和关闭责任,并区分正文可重放与业务允许重试的前提。458 收藏 -
Go text/template 中变量输出为空,常见原因不是模板语法,而是 range、with 改变了点号上下文,或子模板没有显式收到数据。本文用最小示例拆开 dot、$、变量和字段访问的作用域边界,并给出可复用的排查清单。458 收藏