Go问答技术文章
-
Go 的 embed 在编译期读取资源;交叉编译不会自动改写同一文件,平台差异应通过构建约束选择不同源文件。168 收藏 -
围绕 Go signal.Stop、NotifyContext 与优雅退出协调器,说明如何区分撤销信号转发、传播取消和结束进程,避免关闭错误的 channel 与重复清理。168 收藏 -
上传中断后残留临时文件,通常是清理责任混淆或 defer 注册过晚。本文区分 ParseMultipartForm 与 MultipartReader 的文件所有权,并给出断流清理、所有权转移和崩溃回收写法。168 收藏 -
解释 Go database/sql 的 TxOptions 如何跨越驱动边界,区分会话默认值与下一笔事务作用域,并给出可靠的排查和验收方法。165 收藏 -
Go aes.NewCipher 报 invalid key size 时,关键不是截断或补零,而是确认 key 的实际字节数。本文区分原始字节、hex、base64 和密码输入,给出 16/24/32 字节检查、错误处理与 AES-GCM 调用边界。165 收藏 -
Go atomic.Value 不能把 nil 接口和 *Config 混着存。用 typed nil 指针固定具体类型,再用不可变配置快照完成安全的可选配置热更新。164 收藏 -
time.Parse 遇到 MST、CST、PST 等时区缩写时,会受 Local 和缩写是否已知影响。本文用 Zone、Location 和 ParseInLocation 拆开定位方法,并给出更稳定的数值偏移解析方案。163 收藏 -
Golang · Go问答 | 2小时前 | CGO · 垃圾回收 · Go问答 · Go运行时 runtime.AddCleanup runtime.SetFinalizer runtime.KeepAlive 显式Close 资源生命周期
runtime.SetFinalizer 的触发时机无法承担确定性资源释放。本文从显式 Close、runtime.AddCleanup 和 runtime.KeepAlive 三个边界出发,说明如何替代不及时的 finalizer,并处理父子资源、并发关闭和 cgo 指针规则。162 收藏 -
Go GC pacer 变慢不一定是内存泄漏:用 gctrace、运行时指标和 CPU profile 对照回收后存活堆与 GC 工作量,区分堆增长和 CPU 压力,再决定改分配路径还是调参数。161 收藏 -
Go SectionReader 通过 base、当前偏移和 limit 建立固定读取窗口。本文解释 Read 的缓冲区裁剪、ReadAt 的相对偏移、EOF、Seek 与 Size 的边界语义。161 收藏 -
围绕 Go os.CreateTemp 讲清临时文件写入、Sync、Close、路径交接、权限边界与消费后的清理责任。159 收藏 -
Go 的 SetFinalizer 只有在对象变为不可达、GC 发现并完成调度后才可能执行,进程退出不会等待它。本文拆解未执行原因,并用显式 Close、defer 与受控 shutdown 替代退出前清理。159 收藏 -
Go 用 unsafe.String 把可变字节缓冲区借用成字符串后,如果原切片被复用、写入或提前失去生命周期约束,字符串读取时就可能偶发乱码。本文按触发条件定位原因,并给出安全的复制写法。158 收藏 -
Golang · Go问答 | 2星期前 | 随机数 · 错误处理 · Go问答 · 安全编程 · Go crypto/rand rand.Read错误处理 Go随机字节读取 io.ReadFull短读 Go安全令牌生成
围绕 Go crypto/rand.Read 的 n、err 和长度边界,说明如何封装随机读取、测试短读错误,并在成功前阻止半成品随机数据进入业务。158 收藏 -
解释 Go slog LogValuer 递归引用为何会得到错误值,拆解 Value.Resolve 的有限求值、Group 边界、Handler 处理方式和四组测试。158 收藏