Go语言技术文章
-
Go 1.24 的 testing.T.Context 会在 Cleanup 回调执行前取消。本文用后台 worker 示例说明如何传递测试上下文、等待 goroutine 退出,以及父子测试、超时和清理阶段的生命周期边界。380 收藏 -
用 Go 的 utf8.DecodeRune 扫描可能含坏字节的 []byte 时,非法输入会返回 RuneError 和 size=1。本文用一个小型扫描器说明如何按 size 推进游标,避免重复读取同一字节造成循环不前,并覆盖空输入与混合输入边界。380 收藏 -
Go 1.27 的 jsontext.Value 可保存一个原始 JSON 值,但直接转换、Clone、IsValid、MarshalJSON 与 Encoder.WriteValue 的职责不同。本文从切片复用导致内容变化的现象出发,给出安全保存、结构体透传和再次编码方案。378 收藏 -
fs.ValidPath 适合校验传给 fs.FS.Open 的斜杠路径,但它不是本地路径检查器,也不会处理 URL 解码、符号链接和真实文件系统边界。本文用有效与无效样例梳理规则,并给出 HTTP、归档和本地路径场景的安全写法。374 收藏 -
Golang · Go问答 | 5小时前 | 标准库 · 错误处理 · Go问答 · Go Content-Type mime.ParseMediaType ErrInvalidMediaParameter
Go mime.ParseMediaType 遇到可选参数格式错误时,可能返回已经识别出的媒体类型和 ErrInvalidMediaParameter,但参数映射不可继续当成完整结果使用。本文用返回组合、错误判断和降级策略说明怎样处理这一边界。374 收藏 -
Go os.Getenv 在变量未设置和已设置为空字符串时都会返回空字符串;os.LookupEnv 通过第二个布尔值保留存在性信息。本文用配置流水线说明两者的判断边界、默认值策略和错误处理写法。373 收藏 -
Go 基准测试的计时控制实际位于 testing.B。本文用 B.Loop、StopTimer、StartTimer 和 ResetTimer 排除输入准备成本,并说明并行基准的限制。372 收藏 -
Go json.Decoder 可能预读后续协议数据。本文说明如何复制 Buffered 内容,并用 io.MultiReader 按前缀优先的顺序安全交接给下一层。370 收藏 -
用一个清晰的 secret.Do 封装把密码处理函数放进机密边界,讲明输入所有权、结果复制、实验开关、panic 与平台限制。369 收藏 -
用 io.NewSectionReader 限定大文件分片范围,再通过 io.TeeReader 同时写入输出流并计算 SHA-256。本文给出边界检查、短读处理和多分片拆分的完整写法。369 收藏 -
Go database/sql 的 ColumnType.DatabaseTypeName 返回空字符串时,如何区分驱动能力缺失与查询错误,并用显式映射、ScanType 和 unknown 设计稳定的跨驱动回退。369 收藏 -
fs.Sub 可以把已有 FS 映射成以某个子目录为根的视图,嵌套调用时每一层路径都相对当前子 FS 解析。本文拆开根目录变化、符号链接风险与 os.Root 的安全边界,给出可复查的组合方式。367 收藏 -
Go 使用 bufio.Scanner 读取超长行时,默认缓冲可能触发 token too long。本文说明如何在首次 Scan 前调用 Buffer 设置初始缓冲与最大 token,并梳理 Err 检查、内存边界和切换 bufio.Reader 的判断。364 收藏 -
反复调用 regexp.MatchString 时,包级函数会把正则编译带进热路径。本文拆开调用链,给出固定模式与动态模式两种缓存设计,并处理并发、编译失败和容量边界。364 收藏 -
Go 并发代码里,原子计数器并不会自动保护同一结构体中的普通字段。本文从快照偶发不一致的故障现场出发,说明混用为什么仍会产生竞态,并给出全原子、互斥锁和原子快照的修复边界。360 收藏