Go语言技术文章
-
用 Go embed 把默认 YAML 配置和 HTML 模板打进二进制,配合 fs.Sub、template.ParseFS 与外部配置覆盖,解决部署时漏带资源和路径写错的问题。180 收藏 -
Go 用 close(channel) 做退出广播很方便,但重复关闭会 panic。本文说明单一关闭者、sync.Once、只读通道和数据通道所有权之间的边界。144 收藏 -
用 Go 的 os.ReadDir 读取目录,按文件大小筛选普通文件,并通过大小与文件名双关键字得到稳定、可重复的排序结果。282 收藏 -
Go channel 关闭后仍能接收,是因为关闭且排空的 channel 会立即返回元素类型零值;带 ok 的接收可以区分真实发送值和关闭信号。本文用最小示例说明缓冲排空、ok 判断与常见误区。115 收藏 -
用临时名、冲突预检查和倒序移动日志实现 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 收藏