Go教程技术文章
-
Go 的 crypto/x509 校验证书链时,Roots 是信任锚,Intermediates 只是补齐链路。本文从 PEM 解析开始,演示如何构造 CertPool、设置 VerifyOptions,并区分 DNS、用途和证书有效期等校验边界。486 收藏 -
Go fs.WalkDir 传给回调的是逻辑路径和目录项,按文件名筛选时应先用 path.Base 取出最后一段,再用 path.Match 做完整匹配,并分别处理模式错误、访问错误和目录剪枝。486 收藏 -
httputil.DumpResponse 没有响应头过滤参数。本文用复制 Response、复制 Header、大小写不敏感删除和 body=false 的方式生成安全调试摘要,并说明需要正文时怎样避免误伤原响应。486 收藏 -
Go 按分钟对齐时间的最小写法是 t.Truncate(time.Minute)。本文说明它的绝对时间语义、返回值和时区边界,并比较 Truncate、Round 与 time.Date 的适用场景。486 收藏 -
Go 的 fs.Sub 可以把一个 fs.FS 中的子目录挂载成新的文件系统。本文用 embed.FS 说明目录参数、相对路径、错误处理,以及如何把子 FS 接入 fs.ReadFile 和模板加载。486 收藏 -
Go 的 os.Root 可以把文件访问限制在一个目录树内。本文从 os.OpenRoot 和 Root.Open 的最小写法出发,说明 ..、符号链接、Root.FS 与 OpenInRoot 的边界,避免把路径清理误当成安全限制。486 收藏 -
先打开一个可复用的 os.Root,再用相对路径调用 Root.OpenFile;文章说明返回文件句柄的使用方式,以及 Root 与 *os.File 的关闭边界。486 收藏 -
Go strings.FieldsSeq 返回按 Unicode 空白分隔的字符串迭代器。本文用最小示例说明怎样逐个读取字段、提前停止和处理空输入,并解释它与 strings.Fields 的版本与内存边界。486 收藏 -
从 go.mod、go.work 和 GOTOOLCHAIN 三个入口理解 Go toolchain 自动选择,说明 go 与 toolchain 的区别,以及 local、auto、path 和固定版本模式的取舍。485 收藏 -
Go reflect 中,CanAddr 只回答能否取得地址,CanSet 才进一步回答能否修改。本文用普通值、指针 Elem、切片元素和结构字段说明可寻址与可设置的边界。485 收藏 -
Go Fuzz 可以把解析器的正常样例、空输入和历史失败语料放进种子集合,再用覆盖率引导生成新的字节输入。本文从 FuzzXxx、f.Add 和 f.Fuzz 写起,说明如何检查解析结果、运行限时模糊测试,并把失败输入保留为回归语料。485 收藏 -
Go encoding/csv 的 Write 会先把记录写入内部缓冲,Flush 才把缓冲交给底层 io.Writer。本文说明 Writer.Error 为什么必须在 Flush 后检查,怎样区分 Write 的即时错误、Flush 的延迟错误和 WriteAll 的返回值。485 收藏 -
Go 服务可以用 x/text/language 的 ParseAcceptLanguage 读取 Accept-Language 头,把语言标签和 q 权重交给 Matcher 选择支持的语言。本文覆盖返回值、排序、错误和回退处理。485 收藏 -
Go JetStream 的分批消费要先区分一次性 Fetch 与持续拉取的 Messages、Consume。本文用 nats.go 说明消息数、字节数、确认、批次错误和消费生命周期的处理方式。485 收藏 -
Go bufio.Writer 会先缓存写入数据,尾部缺失时应按 Write 返回值、Buffered、Flush 错误和底层持久化语义逐层排查。本文给出文件输出、defer 收尾和可注入错误 Writer 的原创示例。485 收藏