Go语言技术文章
-
Golang · Go问答 | 4天前 | go · 垃圾回收 · 资源管理 · 运行时 · 排错 · Go 垃圾回收 资源清理 runtime.AddCleanup runtime.KeepAlive runtime.Cleanup.Stop
Go Cleanup.Stop 对已经因对象不可达而排队的清理函数不会生效。本文从取消窗口、对象可达性、KeepAlive 位置和闭包反向引用四个方面说明原因,并给出显式释放与兜底清理的配合写法。383 收藏 -
Go 1.24 同时提供 runtime.AddCleanup 和 os.Root。本文用一个可显式关闭的读取器,把文件名限制在指定根目录内,并说明 GC 清理兜底、KeepAlive、Stop 与错误处理边界。382 收藏 -
Go token.File.Lines 的返回切片应按只读数据使用。本文解释切片赋值与独立复制的区别,给出展示数据变换及 SetLines 输入隔离示例,说明源码分析任务中的所有权与并发约束。382 收藏 -
说明Go channel用range消费直到关闭的方法,给出单生产者与多生产者示例,区分缓冲读空、有效零值、关闭权、取消和业务完成。381 收藏 -
Go 的 build constraints 不是只看文件里有没有 import C,而是由显式 //go:build、文件名后缀、目标平台和 cgo 是否启用共同决定文件是否进入包。本文用一对互补实现说明纯 Go 与 cgo 文件的选择规则、跨编译边界和 go list 排查方式。381 收藏 -
Go 的 URL.Path 会保存解码后的路径,RawPath 只是可选的编码提示。本文用 %2F 场景解释 EscapedPath 何时采用 RawPath、何时忽略它,并给出解析和手动构造 URL 时的稳妥写法。381 收藏 -
filepath.Rel 负责按当前系统规则计算相对路径,filepath.ToSlash 负责把成功结果转换成统一的 / 表示。本文用原创示例说明错误处理、输出格式和 .. 边界。381 收藏 -
Go time.Timer.Reset 的 true 和 false 不是成功失败,而是表示旧定时器在调用前仍 active,还是已经到期或停止。本文比较两种状态下的下一次触发、t.C 接收和 Go 1.23 之后的旧值语义,并给出可复用写法。381 收藏 -
本文从一个带固定前缀的字节输入工具出发,演示 bytes.CutPrefix 如何识别前缀、保留 found 状态并组合成可复用的 Go 命令,同时说明空前缀、空输入和原始切片生命周期。380 收藏 -
解析网络帧、文件头或自定义二进制格式时,字段长度和字节序必须同时明确。本文用 Go encoding/binary 的 BigEndian、ByteOrder 和 Read 说明如何读取固定长度字段,并处理短输入、结构体填充与读取方式选择。379 收藏 -
Go slices.Compact 只会删除连续相等元素,直接用于 []error 时还会遇到错误实例身份和可比较性的边界。本文用 CompactFunc 按错误码、消息保留第一条原始错误,并说明何时应该改用 map 做全局去重。378 收藏 -
Go pprof.Lookup 返回 nil 时,优先检查 Profile 是否注册、名称是否逐字一致以及查找时机是否早于初始化。本文给出自定义 Profile 的注册、诊断和导出方法。378 收藏 -
Go 的 netip.Addr.StringExpanded 可以把 IPv6 地址输出为不使用双冒号压缩的完整八组格式。本文从解析、地址族判断和无效值边界出发,给出适合日志、序列化与固定格式对接的写法。377 收藏 -
Go 版本升级后如果 testing.T.Setenv 的结果看起来变了,先核对 Go 版本契约,再排查 t.Parallel、子测试祖先和环境变量读取时机。本文比较三条定位路径,并给出可直接复现的最小测试与修复选择。377 收藏 -
Go 的 macho.OpenFat 返回 ErrNotFat 时,通常只说明文件不是 universal binary 但可能是普通 Mach-O。本文解释魔数判定、错误分支、资源关闭和不能盲目回退的边界。377 收藏