Go语言技术文章
-
Go嵌入资源遍历需要区分原始文件系统与fs.Sub子视图的相对路径。本文通过完整代码说明WalkDir回调、目录跳过和同视图读取规则,避免路径混用。360 收藏 -
Go 里把已经编码的参数再次交给 QueryEscape,常会出现 %25、%2B 等二次编码结果。本文用一个小型 URL 构造器区分查询参数、路径段和 URL 字段,给出稳定的排查与修复写法。360 收藏 -
Go os/exec 通过 Cmd.Dir 设置子进程工作目录;本文同时说明如何读取输出、区分启动失败与非零退出,并处理跨平台路径边界。360 收藏 -
Go 的 encoding/binary.Size 适合计算固定大小数据的二进制长度。本文用结构体、数组和不可编码字段拆开说明返回值、缓冲区分配与错误处理边界。360 收藏 -
Go strconv.AppendQuoteToASCII 会把字符串追加成带双引号的 Go 字符串字面量,并把非 ASCII 字符转成 ASCII 转义。本文用最小示例说明已有 []byte 的追加方式、控制字符处理、返回切片边界,以及它与 Quote、AppendQuote 的取舍。360 收藏 -
用 github.com/pkg/sftp 和 io.Copy 流式下载远端文件,配合临时文件、错误链与关闭错误处理,避免半成品污染最终路径。360 收藏 -
围绕 Go base32.AppendDecode 说明无填充输入的长度余数、NoPadding 选择、部分结果与 CorruptInputError 的处理,并给出缓冲区复用和分段输入的排障方案。360 收藏 -
Ristretto 的 MaxCost 只定义成本上限,新条目仍可能在 Set 缓冲或 TinyLFU admission 阶段被丢弃。本文用 Wait 和 Metrics 区分异步可见性、缓冲丢弃与准入拒绝,并给出调用策略。359 收藏 -
Go atomic.Uint64 的原子性不会消除 uint64 的回绕边界。本文说明如何识别溢出、用 CAS 实现不会回退的饱和计数,并选择清零、分段或归档方案。359 收藏 -
Go 的 regexp.Regexp.SubexpIndex 可以把命名捕获组转换为 FindStringSubmatch 返回值中的稳定位置。本文说明索引映射、不存在与未匹配的区别、重复命名规则,以及如何封装安全读取逻辑。359 收藏 -
Go archive/zip 遇到非内置压缩方法时,可以在 Reader 上注册自定义 Decompressor。本文说明方法编号映射、io.ReadCloser 返回值、File.Open 选择解压器以及校验和和并发资源边界。359 收藏 -
Go 流式响应写入后迟迟不到客户端,通常不只是少调用一次 Flush。本文从 http.Flusher、响应包装器、代理缓冲和 ResponseController 四个层面整理处理方式,并给出可回退的排障清单。359 收藏 -
sync.OnceFunc 把无参无返回值函数包装成可并发调用的一次性入口。本文给出对象级初始化示例,解释包装函数应共享、并发调用等待完成、panic 重复传播,以及重试和初始化后修改的边界。359 收藏 -
sync.Cond.Wait 返回只代表当前 goroutine 被唤醒并重新拿到 Locker,不代表共享条件仍然成立。本文从解锁、唤醒、重新加锁三个状态说明为什么必须用 for 循环检查条件,并给出条件读写、Signal 与排障边界。359 收藏 -
Go 中 *MyError(nil) 放进 error 接口后为何仍不等于 nil?本文用动态类型、动态值和可复制的排查代码说明原因,并给出正确返回方式。359 收藏