Go语言技术文章
-
Go 中需要把多个文件、字符串或网络输入按顺序交给同一个消费函数时,可以用 io.MultiReader 组成连续输入流。本文说明顺序读取、EOF、非 EOF 错误和底层资源关闭责任。426 收藏 -
Go CookieJar 不保存服务端 Cookie,常见原因不是 Set-Cookie 消失,而是 Client 没有配置 Jar,或 Cookie 的域名、路径、Secure、过期时间与下一次请求 URL 不匹配。本文给出一套可复用的排查和修复写法。426 收藏 -
用 Go os/exec 分别读取 stdout 与 stderr,掌握 Start、并发消费管道和 Wait 的正确边界,避免输出混合、管道阻塞和误判退出状态。426 收藏 -
Go 在单 goroutine 中允许 range map 时 delete,但遍历顺序不稳定,新增键可能跳过;并发读写仍需锁或单 goroutine 所有权。426 收藏 -
用 Go benchmark 公平比较字符串拼接实现,掌握 ReportAllocs、AllocsPerRun、B/op、allocs/op 与 b.Loop 的使用边界。426 收藏 -
用 goroutine 与 goroutineleak profile 对照数量趋势和阻塞栈,区分 Go 中正常长期存活的 worker 与真正无法唤醒的 goroutine 泄漏,并给出修复后的复测方法。426 收藏 -
Go regexp 允许多个捕获分组使用同一个名称,真正的编译错误通常来自命名语法、括号闭合、转义或不支持的 Perl 扩展。本文用最小模式、syntax.Error 和 SubexpIndex 拆开排查路径,并给出生产代码中的命名策略。426 收藏 -
用 GopherLua 的 LTable.ForEach 遍历 Lua 表,结合 LValue 类型判断、必填字段检查和嵌套表转换,把脚本配置安全地映射为 Go 业务对象。426 收藏 -
以共享前缀声明为例,比较 Participle 有限前瞻与语法重写在 AST 兼容、字段归属和错误诊断上的取舍,区分真正歧义及左递归问题。426 收藏 -
Go sync.Map.CompareAndSwap 会先比较 key 对应的旧值,只有当前值与 old 相等时才替换为 new。本文用状态更新示例说明返回值、并发重试、可比较类型和与 Store、Swap 的区别。426 收藏 -
fs.ValidPath 判断的是 io/fs 名称语法,不是任意本机相对路径。通过路径元素示例和 Open 封装,区分根目录特例、业务命名、本地转换、文件存在性与实际访问错误。426 收藏 -
Go plugin 并不是可随意替换的跨版本动态模块。本文拆解工具链、构建参数、公共依赖和平台边界,并给出同环境构建与 RPC 解耦的选择方法。426 收藏 -
Go 的 url.PathUnescape 遇到尾部百分号或非十六进制编码时会返回错误。本文用最小代码说明如何判断输入、区分路径和查询解码,并在进入业务逻辑前安全处理坏路径。426 收藏 -
Go 1.25 引入的 os.Root.Lchown 可以在受限目录内修改符号链接自身的数字 uid/gid。本文区分 Lchown 与 Chown 的作用对象,给出错误处理和跨平台排查要点。426 收藏 -
Go 循环中直接 defer file.Close 会把关闭动作推迟到外围函数返回。本文用单文件函数隔离资源生命周期,并说明读取错误、关闭错误和文件描述符复查边界。426 收藏