Go语言技术文章
-
用临时名、冲突预检查和倒序移动日志实现 Go 批量重命名;同一文件系统内任意一步失败时恢复已完成的改名,并说明进程崩溃、并发和跨盘边界。240 收藏 -
Go select 一旦加入 default,就会在没有可通信 case 时立即返回;如果它被放进无条件循环,空闲路径就会变成忙轮询。本文说明如何判断、修复并保留必要的非阻塞语义。453 收藏 -
用 Go 的 filepath.WalkDir 遍历文件树时,如何跳过 .cache、.git 等隐藏目录但继续访问其他路径?本文给出处理 error、判断 DirEntry 和使用 fs.SkipDir 的最小写法,并说明 SkipAll、符号链接与根目录错误的边界。479 收藏 -
Go 从 nil channel 接收不会返回零值,而是永久阻塞。本文通过复现、状态对比和 select 场景,说明如何定位 nil channel,并用初始化、超时或退出信号修复等待无出口问题。291 收藏 -
Go 的 archive/zip 可以先读取 ZIP 中央目录,再用 FileHeader 元数据生成文件名索引,不必打开或解压每个条目。本文给出目录扫描、精确查找、目录项识别和资源关闭的完整做法。408 收藏 -
Go 发送到已关闭 channel 会直接触发 panic。本文从 close 语义、发送方所有权、多发送方汇合和取消信号四个角度说明如何安排关闭时机。386 收藏 -
Go 使用 compress/gzip 写文件时,gzip.Writer.Close 会补齐压缩流并写入 GZIP footer。本文用正确的资源关闭顺序解释 Flush、Close 和底层文件句柄的边界,避免生成无法完整解压的文件。271 收藏 -
Go 普通 map 不支持并发读写,读、写、删除和遍历必须进入同一个同步边界;本文用并发计数器演示 RWMutex 的封装方式,并说明何时评估 sync.Map。439 收藏 -
使用 archive/tar 解包时,先用 filepath.IsLocal 拒绝绝对路径和 .. 条目,再按 TypeDir 创建目录、按普通文件条目写入内容,保留 tar 原有目录结构。136 收藏 -
Go 的 map 遍历顺序没有语言保证,测试不应直接比较遍历结果的顺序;本文用排序、集合比较和显式顺序建模解决这类不稳定断言。163 收藏 -
用 Go 的 io.Pipe 把数据生产、gzip 压缩和 HTTP 请求体串成流,讲清同步背压、错误传播、取消处理以及 Content-Length 和重试边界。249 收藏 -
Go 的 range 循环里取变量地址,是否重复取决于循环变量是用 := 声明还是用 = 复用,以及模块采用的 Go 版本。本文用切片副本、切片元素地址和旧版本兼容写法说明如何判断与修复。501 收藏 -
Go 中需要把多个文件、字符串或网络输入按顺序交给同一个消费函数时,可以用 io.MultiReader 组成连续输入流。本文说明顺序读取、EOF、非 EOF 错误和底层资源关闭责任。426 收藏 -
Go 切片 append 后原切片数据也变化,通常是因为新切片仍复用了容量范围内的底层数组。本文用 len、cap 和三切片表达式判断复用边界,并比较 append 隔离与 copy 深度复制的选择。291 收藏 -
用 Go 包装 io.Reader,在不把整文件读入内存的前提下统计上传过程中已经读取的字节数。本文区分 Reader 进度、网络发送和服务端落盘边界,给出并发读取进度、失败重试与未知总大小的处理方式。127 收藏