Go问答技术文章
-
Go 泛型约束写了具体类型,却不代表类型参数拥有该类型的全部方法。本文从类型集、方法集和接口约束的边界出发,解释常见编译错误,给出可运行的修复写法,并说明什么时候该把行为写进约束。154 收藏 -
用 Go 的 slog.LogValuer 控制日志字段的延迟求值与脱敏,厘清日志级别过滤、LogValue、slog.String 和 slog.Group 的调用边界。154 收藏 -
Go 的一次取值函数适合惰性初始化,但初始化函数一旦 panic,后续调用会再次 panic,而不是自动重试。本文拆开这个语义,给出可观测、可控的失败处理方案。152 收藏 -
Go 的 os.File.ReadAt 适合多个 goroutine 按独立偏移量并发读取同一个文件,但每次调用仍要检查 n 和 err,尤其要正确处理 n < len(buf) 的短读与 io.EOF。152 收藏 -
Golang · Go问答 | 2天前 | 切片 · golang · Slices · 迭代器 · Go 1.23 · 迭代器 slices.Chunk Go slices.Chunk 切片分组 尾块
slices.Chunk 从 Go 1.23 起把切片分成连续的小段并返回迭代器。本文从一次批处理误改原切片的故障入手,说明尾块、容量裁剪、n 参数和遍历期间修改的边界,给出可验证的安全写法。150 收藏 -
bytes.Buffer 和 strings.Builder 都能减少反复拼接带来的分配,但它们服务的结果类型不同。本文用日志行拼接、HTTP响应和复用场景对比 Write、WriteString、String、Bytes 与 Reset 的边界,给出可落地的选择规则。150 收藏 -
Go 1.20 引入的 errors.Join 可以把多个失败原因合成一个可匹配的错误。本文用批量校验和并发收口示例,说明遍历顺序、errors.Is/errors.As 的匹配边界,以及如何输出不丢信息的日志。150 收藏 -
用 Go embed.FS 读取内嵌模板时,路径必须是相对且规范化的 slash 路径。本文从路径校验、fs.ReadFile 错误分层和测试验收三个角度,给出可直接落地的安全读取函数。149 收藏 -
reflect.Value.Comparable 用来先判断值是否具备 Go == 比较条件。本文从接口值和 slice、map 等不可比较类型出发,说明安全比较的写法、panic 边界与迁移检查点。148 收藏 -
Go regexp 的 FindAllString 适合一次拿到全部匹配,但重复匹配、空匹配和 n 参数经常让结果数量出乎意料。本文用可运行示例拆解扫描游标与边界,并给出限制匹配次数的可靠写法。147 收藏 -
Go 测试使用 t.TempDir 创建临时目录时,目录会在当前测试及其子测试全部结束后自动清理。本文拆解清理时机、并行子测试、路径拼接和失败复现边界,给出可直接回归的测试写法。145 收藏 -
Go map 直接读取时,缺失键和真实的零值会得到同一个结果。本文用 ok 语法、comma-ok 判断和 nil map 示例,说明如何区分存在性、避免误判,并把判断边界写进函数接口。145 收藏 -
json.RawMessage 适合把 JSON 解码延后,但 MarshalJSON 与 UnmarshalJSON 的字节所有权规则不同。本文用最小代码说明何时会复制、何时只是复用已有字节,以及如何避免修改底层切片带来的隐蔽问题。143 收藏 -
Go channel 关闭后,接收方可以用 comma-ok 判断状态,也可以用 range 自动读到结束;真正容易出错的是发送方与关闭方的职责边界。本文用最小示例说明判断、排空和并发收尾的正确写法。142 收藏 -
Go 里用 sort.Slice 和 sort.SliceStable 排序时,真正容易忽略的是相等元素的顺序与 less 比较函数约束。本文用一组带优先级和序号的记录,演示两者差异、稳定排序的适用边界和可复查写法。142 收藏