Go问答技术文章
-
从 Go 指针指向的内存内容与 C 是否跨调用保留地址两个边界,定位 cgo 指针规则 panic,并比较直接传字节、C 内存、cgo.Handle 和 runtime.Pinner 的安全写法。223 收藏 -
Golang · Go问答 | 1星期前 | channel · goroutine · pprof · Go问答 · context pprof 有界队列 go goroutine泄漏 无界channel
Go 原生 channel 容量固定,所谓无界 channel 多由中转 goroutine 与无限 slice 构成。本文用 goroutine profile 定位阻塞堆栈,并迁移到有界队列、context 取消与 WaitGroup 退出等待。383 收藏 -
通过固定工作量对比 GOMAXPROCS,说明 CPU 配额、阻塞任务和运行时默认策略如何影响 Go 并发吞吐,并给出上线复核清单。417 收藏 -
从 G、M、P 的阻塞表现出发,把 Go 长时间 CPU 计算拆成可恢复批次,用 context、有界 worker 池和 execution trace 控制延迟、取消与并行度。319 收藏 -
讲清 Go heap profile 中 inuse_space 与 alloc_space 的统计口径、适用症状、增量采集方式和误判边界,帮助区分内存留存与分配抖动。350 收藏 -
用 Go execution trace 观察 goroutine 的阻塞区域,掌握 trace 文件采集、task/region 标记、go tool trace 阅读和 pprof 导出方法。283 收藏 -
Go goroutine 泄漏不能靠单次数量下结论。本文给出受控 pprof 端点、基线与增量样本、debug 文本栈和负载记录的组合方法,用持续增长堆栈定位阻塞点并完成修复复测。104 收藏 -
Go SetFinalizer 的触发时机由垃圾回收决定,不适合承担文件描述符、连接等非内存资源的确定性关闭。本文用 Close、defer、sync.Once 和 runtime.AddCleanup 组合出显式主路径加兜底清理的方案,并说明边界。439 收藏 -
runtime.KeepAlive 用于让持有原生句柄的 Go 对象在指定位置前保持可达,避免 finalizer 提前关闭资源。本文给出最小写法、放置位置、适用边界与常见误区。489 收藏 -
围绕 Go signal.Stop、NotifyContext 与优雅退出协调器,说明如何区分撤销信号转发、传播取消和结束进程,避免关闭错误的 channel 与重复清理。168 收藏 -
用 database/sql 的 ColumnTypes 处理动态查询列:字段白名单负责安全,参数绑定负责值,ColumnTypes 负责结果元数据与稳定组装。319 收藏 -
解释 Go database/sql 中 Rows.Next 返回 false 的两种含义,给出 QueryContext、Scan、Rows.Err 和 Close 各自负责的错误边界与完整示例。266 收藏 -
Go 将数据库 NULL 直接扫描到 string 会失败。本文用 sql.NullString、sql.Null[string] 与 COALESCE 对比字段适配方案,说明如何保留空值语义并覆盖回归边界。388 收藏 -
解释 Go database/sql 中 Tx.Stmt 复用 DB 级预处理语句时的对象归属、事务绑定、关闭责任、上下文与并发边界。154 收藏 -
解释 Go database/sql 的 TxOptions 如何跨越驱动边界,区分会话默认值与下一笔事务作用域,并给出可靠的排查和验收方法。165 收藏