Go语言技术文章
-
time.Parse 遇到 MST、CST、PST 等时区缩写时,会受 Local 和缩写是否已知影响。本文用 Zone、Location 和 ParseInLocation 拆开定位方法,并给出更稳定的数值偏移解析方案。163 收藏 -
Golang · Go问答 | 21小时前 | CGO · 垃圾回收 · Go问答 · Go运行时 runtime.AddCleanup runtime.SetFinalizer runtime.KeepAlive 显式Close 资源生命周期
runtime.SetFinalizer 的触发时机无法承担确定性资源释放。本文从显式 Close、runtime.AddCleanup 和 runtime.KeepAlive 三个边界出发,说明如何替代不及时的 finalizer,并处理父子资源、并发关闭和 cgo 指针规则。162 收藏 -
Go SectionReader 通过 base、当前偏移和 limit 建立固定读取窗口。本文解释 Read 的缓冲区裁剪、ReadAt 的相对偏移、EOF、Seek 与 Size 的边界语义。161 收藏 -
WithCancelCause 可以让调用链继续用 ctx.Err() 判断取消类别,同时通过 context.Cause(ctx) 保留超载、用户主动停止等业务原因。本文给出迁移写法和父子 Context 的边界清单。160 收藏 -
Go 1.24 的 os.Root 会在目录边界内解析符号链接,本文区分 Root 的访问校验与 Root.Symlink 的创建语义,说明根内链接、越界目标、绝对链接和资源释放的处理方式。160 收藏 -
使用 Go embed.FS 暴露静态资源时,先固定嵌入目录,再用 fs.Sub 把对外资源根缩小到指定子目录,最后接入 http.FileServer。本文结合路径规则、错误处理和缓存边界给出一套不容易混淆的写法。160 收藏 -
Go 1.24 及以上通过 http.Server.Protocols 和 SetHTTP2 配置只启用 TLS 上的 HTTP/2,并梳理默认值、ALPN 与明文 h2c 的边界。159 收藏 -
Go 的 SetFinalizer 只有在对象变为不可达、GC 发现并完成调度后才可能执行,进程退出不会等待它。本文拆解未执行原因,并用显式 Close、defer 与受控 shutdown 替代退出前清理。159 收藏 -
Go 的 io.MultiWriter 会把同一批字节按传入顺序写入多个 io.Writer,某个目标出错后立即停止。本文用文件和内存缓冲区示例说明用法、错误边界与并发注意事项。158 收藏 -
解释 Go slices.Delete 后 len、cap、尾部零值和外部引用如何共同影响内存释放,并给出清零、Clip 与 Clone 的选择清单。158 收藏 -
Go 1.26+ 的声明式迁移如果没有改写调用点,最常见原因是旧 API 声明前缺少 //go:fix inline。本文同时说明指令位置、适用对象、安全边界,以及复杂自定义 Analyzer 必须提供 SuggestedFixes、通过 unitchecker 与 -fixtool 接入的完整排查方法。157 收藏 -
Golang · Go问答 | 4天前 | channel · panic · 并发编程 · Go问答 · 并发安全 go channel关闭 send on closed channel Golang panic Channel关闭权 多生产者
向已关闭的 Go Channel 发送会触发运行时 panic,因为 close 已声明不会再有新值。本文给出最小复现、单发送者和多发送者安全关闭写法,并说明为什么接收者关闭、isClosed 检查、sync.Once 或 recover 不能替代正确的关闭权设计。156 收藏 -
Go runtime/secret 可在受保护调用树结束时擦除寄存器和栈,并在相关堆对象不可达且被 GC 发现后擦除分配,从而缩短临时密钥出现在后续内存转储中的时间。本文给出最小用法、构建条件、平台边界与不能被它消除的副本风险。156 收藏 -
Go 的 archive/tar 适合流式读取归档。本文区分 Header 与 payload,演示只保留文件头元数据、用固定缓冲区消费内容,并说明超大条目和异常归档的内存控制边界。155 收藏 -
解释 weak.Pointer.Value 返回 nil 的正常回收语义,区分共享引用容器与目标字段的数据竞争,并给出锁、KeepAlive 和 race detector 的排查写法。153 收藏