Go教程技术文章
-
对比 Go strings.CutPrefix 与 strings.TrimPrefix 的返回值和适用场景,说明何时需要 found 判断、何时只需得到去掉前缀后的字符串,并补充空前缀、大小写和旧版本兼容边界。447 收藏 -
解释 Go encoding/xml Decoder.Strict=false 对缺失结束标签、异常实体和命名空间的实际影响,并说明 AutoClose、Entity 的配置边界与生产选择。447 收藏 -
Go 可以用标准库 embed 在编译期把 HTML、CSS、JavaScript 等静态文件写入可执行程序,再通过 embed.FS、fs.Sub 和 http.FileServer 提供页面。本文给出完整写法,并说明目录、隐藏文件、模板和更新边界。446 收藏 -
用一个可复现的并发通知示例,说明 WaitGroup、关闭通道和超时断言怎样配合,避免 Go 测试偶发卡死或漏验收。445 收藏 -
govulncheck 的价值不是多报漏洞,而是把模块命中、包导入和漏洞符号可达分层。本文给出调用链核对、构建条件对齐及升级复核方法。445 收藏 -
fs.ValidPath 并不会因为反斜杠本身判定路径非法。本文拆开 io/fs 逻辑路径、Windows 本地路径转换和文件系统实现三层边界,说明如何正确处理跨平台路径。445 收藏 -
Go 的 CertPool.AppendCertsFromPEM 返回 true 只表示至少一个 PEM 证书解析成功,并不代表所有证书有效或已经建立信任链。本文拆解 true/false 边界,给出逐块诊断和 Certificate.Verify 的分层判断方法。445 收藏 -
Go zip.NewReader 不能直接接收普通 io.Reader。本文用 bytes.Reader 和临时文件说明如何提供 ReaderAt、准确 size,并正确处理 ZIP 成员资源。444 收藏 -
Golang · Go教程 | 3天前 | 标准库 · 定时器 · Go教程 · Go time.Timer Timer.Reset Timer.Stop 定时器复用 asynctimerchan 旧事件
Go 1.23 默认 timer channel 已不会让 Reset 后读到旧事件,但旧版本或 asynctimerchan=1 仍需 Stop、排空 t.C 再 Reset。本文按版本、接收状态和 AfterFunc 边界给出可复用写法。443 收藏 -
Go 的 html/template.URLQueryEscaper 适合把模板参数放进 URL 查询值,但它不是多值参数构造器。本文对照空格、加号、& 和 url.Values.Encode 的输出,给出可复核的写法与边界。441 收藏 -
用 Go 的 multipart.Reader 逐个接收多个上传文件,配合 MaxBytesReader 和 LimitReader 控制请求总量、单文件大小,并正确处理 EOF、超限和临时文件清理。441 收藏 -
iter.Seq2 的 K、V 是按值传给 yield 的,不能靠取 range 变量地址消除复制。本文对比指针返回、ID 句柄和保留值返回,给出生命周期、并发与提前停止的实用边界。441 收藏 -
复用 bytes.Buffer 时,旧数据残留通常是因为写入会追加而不是覆盖。本文用 Len、Cap、Reset 和 Grow 拆开逻辑长度、底层容量与切片别名,给出循环复用、容量阈值和返回值复制的处理方式。441 收藏 -
通过一个可运行的 Go 示例,拆解 sort.Find 的比较函数方向、最小插入点和 found 返回值,避免把它误用成返回 -1 的查找函数。440 收藏 -
go/types.Info.FileVersions 可以告诉静态分析工具每个 ast.File 使用的 Go 语言版本。本文用一组可运行的类型检查代码说明文件版本、Config.GoVersion、Package.GoVersion 的关系,并处理版本缺失、类型错误和未来版本等边界。440 收藏