Go语言技术文章
-
解释 maps.Clone 不能直接读取文件,结合 Go 1.24 的 os.OpenRoot 与 Root.Open 在受限根目录内读取相对路径,再按需生成 map 快照并处理字节切片的浅克隆问题。120 收藏 -
Go context.Cause 看起来不稳定,通常不是 Cause 随机变化,而是父子 context 的第一次取消顺序、CancelCauseFunc 调用时机或超时 API 选择不明确。本文用最小代码拆开 Err、Cause、取消顺序和并发入口,给出可复查的排查方式。118 收藏 -
用 Go 1.24 的 runtime.AddCleanup 为小型资源工具增加 GC 兜底:显式 Close 负责主路径,幂等状态避免重复释放,回调参数和 KeepAlive 处理对象可达性边界。117 收藏 -
Go 升级后 gofmt 可能因为格式规则或实现调整产生少量空白差异。本文用变化文件数、diff 行数和工具链版本定位原因,再通过 go.mod、toolchain 与 CI 固定格式化环境。116 收藏 -
用一个小型 docpeek 工具说明如何把本地目录包装成 fs.FS,组合 fs.ReadDir 与 fs.ReadFile,并处理 fs.ValidPath、相对路径和符号链接边界。114 收藏 -
从 GOMOD、go env、GOPROXY、GOPRIVATE 和 tidy 输入边界入手,排查 Go go mod tidy 配置没有生效的常见原因。114 收藏 -
本文用文件名清理场景说明 strings.CutSuffix 的返回语义:命中后返回去掉后缀的字符串视图并保留 found 状态,短期使用可以减少无意义复制,跨越长生命周期时再用 strings.Clone 获取独立数据。113 收藏 -
io.MultiWriter 会按顺序把同一份数据写给多个 Writer;任一 Writer 返回错误就停止后续写入,短写则转换为 io.ErrShortWrite。本文说明部分成功、失败传播与补偿设计的边界。112 收藏 -
Go archive/zip.File.OpenRaw 返回 ZIP 条目中未解压的原始数据。本文区分 Open 与 OpenRaw,说明如何根据压缩方法读取原始字节,并介绍原样复制条目时使用 Writer.Copy 的边界。112 收藏 -
Go html/template 输出和预期不同,通常不是数据丢失,而是模板根据 HTML、属性或 URL 上下文自动转义。本文用最小示例区分纯文本、可信 HTML 和不安全 URL,给出不绕过安全保护的排查与修复方法。108 收藏 -
本文围绕运行时正则配置的常见故障,说明怎样使用 regexp.Compile 返回可诊断错误,在配置加载阶段保留规则名称和原始语法错误,并区分编译失败与文本匹配不到。107 收藏 -
Go slog.Logger.Enabled 可以在日志级别判断阶段提前返回,避免为不会输出的日志构造昂贵参数。本文用最小示例说明 HandlerOptions.Level、Enabled、LogAttrs 与 LogValuer 的配合边界。105 收藏 -
Go sync.Mutex 不支持同一 goroutine 的重入。本文从调用栈定位嵌套 Lock,明确解锁责任,并用带锁入口与无锁核心函数拆分临界区。102 收藏 -
围绕 Go 1.23 引入的 iter.Pull,说明 next 返回值与 ok 标志如何判断空序列和自然结束,并用 defer stop 覆盖提前退出、限量读取与找到目标值等边界场景。102 收藏 -
Go maps.Clone 适合把一个 map 配置复制成独立的顶层工作副本,再组合读取、更新和快照导出逻辑。本文从浅复制边界出发,搭建一个小型配置工具,并说明 nil、嵌套切片和并发访问的取舍。101 收藏