Go教程技术文章
-
Go exec.CommandContext 超时后,不要用 cmd.Process 非空判断进程存活。本文用 Run/Wait、ctx.Err、ExitError 和 ProcessState 区分取消原因、直接子进程终态、输出采集与资源回收边界。364 收藏 -
Go 的 os/exec 使用 StdoutPipe 或 StderrPipe 时,真正容易卡住的通常不是少写一个 Close,而是读取未完成就 Wait,或子进程继承了输出管道。本文给出无手工管道和并发读取两种写法,并整理取消、错误处理与 EOF 排查要点。241 收藏 -
Go 的 os/exec 不需要把命令拼成一整行:将程序名和每个参数分别传入,带空格的路径就能保持完整,再按场景选择 Output、CombinedOutput 或 StdoutPipe,并用 Wait 完成回收。313 收藏 -
filepath.WalkDir 会访问符号链接这一项,但不会自动进入它指向的目录。本文用 DirEntry、os.Stat 和错误回调拆开链接本身、目标信息、失效链接与权限错误的处理边界。132 收藏 -
使用 Go filepath.WalkDir 扫描目录时,先处理回调错误并记录 path,再用 SkipDir 控制目录过滤;本文还说明 DirEntry、符号链接和根路径失败的边界。162 收藏 -
用 Go filepath.WalkDir 递归过滤指定扩展名文件,正确处理目录、符号链接、根路径失败和子目录读取错误,保留部分结果与错误清单。255 收藏 -
Go 的 ZIP 条目名本来就使用正斜杠表示层级,但不能把名称直接拼到解压目录。本文用 archive/zip、filepath.IsLocal 和 filepath.Localize 还原目录结构,并区分目录条目、文件名编码与读取错误。149 收藏 -
Go 的 archive/zip 中,目录条目和空文件都可能没有可读内容,但判断依据不同。本文用 FileHeader.IsDir、Name、NonUTF8 和 Open 组织一个安全的解压循环,说明如何保留空文件并定位条目读取错误。274 收藏 -
用 Go archive/zip 按条目读取大文件,先检查目录元数据,再用 File.Open 和 io.CopyBuffer 流式处理,同时区分文件名编码、路径安全、压缩算法和校验错误。385 收藏 -
用 io/fs.FS 统一 Go 的 embed.FS 与 os.DirFS,解释 fs.ValidPath 的路径规则、发布目录边界和开发环境切换方式。403 收藏 -
Go 的 //go:embed 资源属于 embed.FS,os.Stat 查询的是当前工作目录。本文用 fs.ValidPath、fs.Stat 和路径层级排查嵌入静态资源找不到的原因。480 收藏 -
Go 使用 embed.FS 读取子目录时,路径不是磁盘绝对路径,而是相对嵌入文件系统根的斜杠路径。本文说明 fs.ValidPath、path.Join 和 fs.Sub 如何配合,避免路径拼错和发布后找不到文件。153 收藏 -
Go 反射读取结构体 json 标签时,Get 无法区分未声明与显式空值。本文用 StructTag.Lookup 解释 value 和 ok 的三态判断,并说明格式异常应如何配合 go vet 排查。360 收藏 -
Golang · Go教程 | 22小时前 | 反射 · Go教程 · 结构体标签 · 字段元数据 · Go reflect.StructTag StructTag.Lookup StructTag.Get
Go 读取结构体自定义标签时,先通过 reflect.TypeOf 和 Field 拿到 StructField,再用 Tag.Lookup 区分标签缺失与显式空值;Tag.Get 适合只关心字符串的兼容场景,但非约定格式的返回值不应被依赖。291 收藏 -
Golang · Go教程 | 23小时前 | Go教程 · 资源释放 · Go迭代器 · range函数 · Go iter.Seq iter.Pull iter.Seq2 range-over-function
Go 1.23 的 range-over-function 会把循环里的 break 转成迭代器可识别的停止信号。本文用 iter.Seq、Seq2 和 iter.Pull 说明 yield 返回 false、defer 清理与 stop() 的配合,解决惰性遍历提前结束时资源没有释放的问题。380 收藏