Go教程技术文章
-
Go 的 os.ReadFile 会把完整文件返回为 []byte。本文从内存边界出发,说明什么时候继续使用它,什么时候改用 os.Open、io.Copy、io.LimitReader 或有界逐行读取。272 收藏 -
Go 基准测试中的 b.Cleanup 会在基准函数和子基准完成、计时停止后执行,清理回调本身不会计入 ns/op,但回调登记动作若放进循环仍会计时。本文对比 b.Loop、b.N、defer 与手动 Close 的资源边界。272 收藏 -
Go compress/flate 的 NewWriterDict 适合压缩包含稳定重复片段的文本,但压缩端和解压端必须提前约定同一份字节字典。本文用 JSON 和模板字段示例说明 API 用法、适用条件、兼容风险与选型边界。272 收藏 -
Go 使用 compress/gzip 写文件时,gzip.Writer.Close 会补齐压缩流并写入 GZIP footer。本文用正确的资源关闭顺序解释 Flush、Close 和底层文件句柄的边界,避免生成无法完整解压的文件。271 收藏 -
Go 的 time.Parse 不能用一个 layout 自动吞掉可选时区。本文按日志形状分流:显式时区用 time.Parse,缺少时区用 time.ParseInLocation,并说明如何统一比较与落库。271 收藏 -
用 embed.FS 把 HTML 模板嵌入 Go 二进制,再通过 html/template.ParseFS 解析并用 ExecuteTemplate 输出页面。本文从路径、glob、模板名称和数据四个边界说明部署自包含与常见排错方法。271 收藏 -
SetConnMaxIdleTime 用来限制连接在池中连续空闲的最长时间,过期连接可能由清理器或复用前检查惰性关闭。它应与 MaxIdle、MaxOpen 和 MaxLifetime 配合,并通过 DB.Stats 观察淘汰计数。271 收藏 -
用 context.WithTimeoutCause 保存超时原因,用 context.Cause 区分截止时间、主动取消和上游取消。271 收藏 -
Go 1.27 的 encoding/json/jsontext 提供面向 JSON 语法的 Decoder 和 Token。本文从最小读取示例、对象数组边界、跳过值和 Token 生命周期四个方面说明怎样按 token 处理 JSON。271 收藏 -
Go 的 os.File.Readdirnames 适合把目录名称按固定批量读取。本文说明目录游标如何推进、怎样处理部分结果与 io.EOF,以及为什么它不会递归或排序。271 收藏 -
Go os.File.Truncate 把文件扩大后,新增区域读取起来像是由零字节填充。本文从文件逻辑长度、零填充读取语义和稀疏文件的物理占用三个层面解释原因,并给出适合固定长度文件的 Go 写法。271 收藏 -
用 Go 的 parser.ParseDir 按文件名筛选目录中的 .go 文件,按包名获取 AST 文件集合,并处理目录读取失败、语法错误和 build tags 不参与解析的边界。271 收藏 -
用 go/types.NewVar 创建名称为空的变量,再把它们按结果顺序传给 types.NewTuple,即可构造不带名称的有序结果列表。本文说明 NewTuple、Tuple、At、Len 和 Variables 的关系,以及空 Tuple 与越界访问的边界。271 收藏 -
Go 1.24 引入的 crypto/subtle.WithDataIndependentTiming 能在敏感计算期间启用架构相关的独立时序能力,但它不会把变长代码自动变成常量时间。本文用最小示例说明包裹范围、嵌套调用、goroutine 继承和旧版本兼容边界。270 收藏 -
讲清 Go 1.22+ http.ServeMux 的父子树路由、方法匹配、具体性优先、通配符、405 与尾斜杠边界。270 收藏