Go教程技术文章
-
Go 1.21 引入的 clear 可以快速清空 map,但它解决的是元素清理,不是所有内存都立刻归还。本文用临时缓存场景拆解 clear、重新 make 和逐项删除的差别,再用基准与运行时指标确认容量复用是否真的适合当前代码。211 收藏 -
Go 长循环使用 time.Ticker 时,关键是把退出信号与 ticker.C 放进同一个 select,并在拥有 ticker 的函数退出路径调用 Stop;需要改周期时使用 Reset,同时用完成通知确认 goroutine 已结束。211 收藏 -
使用 Go embed.FS.ReadFile 读取内置资源时,不要只比较错误字符串。本文从 io/fs 的路径规则出发,演示如何用 errors.Is 判断资源不存在,再用 errors.As 读取 PathError 的操作名、路径和底层原因。211 收藏 -
Go 的 gzip.Writer 会把 Header.ModTime 写进 gzip 头部 MTIME。固定 UTC 秒级时间,并在 Write、Flush 或 Close 之前设置,才能避免归档因当前时间变化而产生不稳定字节。211 收藏 -
Go 的 cookiejar.Options 可通过 PublicSuffixList 限制 Cookie 的域作用范围。本文讲清 publicsuffix.List 接入方式、nil 配置风险、自定义接口约束与公网客户端实践。211 收藏 -
Ristretto v2 可以用 SetWithTTL 为每个缓存键设置独立过期时间,GetTTL 则能读取剩余 TTL 并区分未找到和永久缓存。本文从一个缓存同时保存短时与长时数据的场景出发,说明 Wait、返回值、容量淘汰和 TTL 到期之间的排查边界。211 收藏 -
比较大字节序列时,已有 []byte 就直接使用 bytes.Equal,不必先转换成 string。本文说明它的判断边界、与前缀和排序 API 的区别,以及性能和并发注意事项。211 收藏 -
处理 multipart/form-data 时,不必把上传文件全部读入内存。本文用 NextPart 与 NextRawPart 展示如何按字段读取、跳过文件内容,并说明文件名解码和边界错误的判断方法。210 收藏 -
用 testing.F 和 f.Add 写 Go fuzz 测试时,随机字节并不会自动符合业务格式。本文演示如何保留长度与位置变化,把输入映射到合法字符域,并拆分非法输入测试。210 收藏 -
用一个可运行的 Go HTTP 示例,把租户配置从全局变量迁移到请求级依赖容器,说明 Handler、TenantConfig 和 context.Context 的边界、取舍与验证方式。209 收藏 -
用 Go text/template 的 Clone 复制公共模板命名空间,再为 Web 和邮件渠道追加独立 body 定义,掌握 ExecuteTemplate、并发执行与 HTML 安全边界。209 收藏 -
Go 的 string 可以保存任意字节,不能只凭字符串类型判断文本合法性。本文用 unicode/utf8.ValidString 做入口校验,并结合 DecodeRuneInString 定位第一个非法 UTF-8 字节。209 收藏 -
Go url.Values 的空值并不等于没有参数:空字符串会编码成 key=,空切片不会输出该键,重复值会按添加顺序展开。本文用 Encode 和 ParseQuery 对照说明三种状态,并给出 Set、Add、Del 的选择边界。209 收藏 -
从 CookieJar 的接口职责、域名路径匹配到 PublicSuffixList 配置,说明 Go HTTP 客户端如何控制会话范围并排查 Cookie 不生效。209 收藏 -
Go database/sql 的 sql.DB 是连接池。需要让一组操作落在同一个数据库会话时,可以用 DB.Conn 获取独立连接;操作结束必须调用 Conn.Close 将连接归还池中,并用上下文控制等待时间。209 收藏