Go语言技术文章
-
Go 的 database/sql.QueryRowContext 不直接返回查询错误,真正的结果要从 Row.Scan 获取。本文用 sql.ErrNoRows 和 errors.Is 区分未找到、数据库失败与成功,并整理封装和边界处理。457 收藏 -
Golang · Go问答 | 3天前 | 单元测试 · 错误处理 · go · Go testing.T Cleanup失败 Go t.Cleanup错误处理 Go测试清理函数继续执行 Go测试失败不终止 Go测试资源释放排查
t.Cleanup 是测试结束阶段的清理回调,失败只会影响测试结果或当前清理函数,不会回到注册点打断已经继续执行的测试体。本文按执行时机、失败标记和清理顺序拆解排查方法。267 收藏 -
Go 的 hash.Hash.Sum 会把当前摘要追加到传入切片,并且不改变哈希状态。本文用 sha256 示例说明 nil、前缀、容量复用和继续 Write 的正确写法。263 收藏 -
Go race 报告没有栈信息时,先区分没有触发竞态、历史栈恢复失败和日志截断,再用 go test 的 -run、-count、-cpu 与 GORACE 的 history_size、log_path 提高复现和定位效率。156 收藏 -
Go 里 crypto/sha256.New 和 sha256.Sum256 都能计算 SHA-256,但适用场景不同:一次性 []byte 直接用 Sum256,文件、网络流和分块数据用 New。本文用代码、返回类型和边界清单说明如何选择。247 收藏 -
Go trace 的 scheduler latency 与 CPU profile 统计对象不同。本文用同一段负载采集两份画像,解释如何区分调度排队、CPU 热点和阻塞等待,并给出复采检查清单。460 收藏 -
Go 的 CertPool.AppendCertsFromPEM 返回 true 只表示至少一个 PEM 证书解析成功,并不代表所有证书有效或已经建立信任链。本文拆解 true/false 边界,给出逐块诊断和 Certificate.Verify 的分层判断方法。445 收藏 -
从 Go pprof goroutine profile 的等待状态和栈顶函数入手,区分通道、锁、网络、定时器与可运行协程,并说明何时切换到 block、mutex profile 或 trace。330 收藏 -
通过包装 tls.ClientSessionCache 记录 Get、Put 与命中,再用 ConnectionState.DidResume 区分缓存命中、TCP 连接复用和真正的 TLS 会话恢复。463 收藏 -
Go finalizer 不是对象销毁通知。短命对象可能仍可达、回调尚未执行、属于零大小或 tiny 批分配、存在引用环,或者进程已退出。本文给出判断边界、KeepAlive 用法和更稳妥的资源释放选择。456 收藏 -
Go pprof 的 alloc_space 看累计分配,inuse_space 看最近一次 GC 后仍存活的内存。同一调用栈排名相反并不矛盾,关键是先确认对象生命周期,再用两个视图交叉判断。211 收藏 -
讲清 Go crypto/tls Config.MinVersion 的最低版本语义,比较 MinVersion 与 MaxVersion 的范围配置,并用 ConnectionState 判断实际协商结果。448 收藏 -
Go GC pacer 变慢不一定是内存泄漏:用 gctrace、运行时指标和 CPU profile 对照回收后存活堆与 GC 工作量,区分堆增长和 CPU 压力,再决定改分配路径还是调参数。161 收藏 -
用 Go 的 net/netip Prefix.Masked 把带主机位的 CIDR 统一成稳定网段键,并说明无效前缀、IPv4 与 IPv6 的处理边界。448 收藏 -
runtime.KeepAlive 不是“调用前保活”开关,而是把对象的可达性保证到它所在的位置。本文用系统调用示例说明放错位置为何仍可能提前回收,以及如何把保护边界放在真正的调用之后。270 收藏