Go语言技术文章
-
maps.Keys 返回的键迭代顺序并不保证一致。本文用 slices.Sorted 和兼容写法,把 map 键转换为可复现的排序切片,并解释稳定结果与稳定排序算法的区别。158 收藏 -
Go strings.Builder 调用 String 后仍然可以继续写入。本文结合 String、WriteString、Reset、Grow 和非零 Builder 不可复制的限制,说明如何安全复用 Builder。158 收藏 -
Go 用 unsafe.String 把可变字节缓冲区借用成字符串后,如果原切片被复用、写入或提前失去生命周期约束,字符串读取时就可能偶发乱码。本文按触发条件定位原因,并给出安全的复制写法。158 收藏 -
Golang · Go教程 | 4星期前 | Go教程 · Go slog JSONHandler时间格式 HandlerOptions ReplaceAttr slog.TimeKey Go结构化日志时区 time.Time Format
Go log/slog 的 JSONHandler 没有直接的时间布局参数,本文用 HandlerOptions.ReplaceAttr 重建 time 属性,讲清 Go 时间布局、UTC、分组字段和零时间的处理边界。158 收藏 -
Golang · Go问答 | 3星期前 | 随机数 · 错误处理 · Go问答 · 安全编程 · Go crypto/rand rand.Read错误处理 Go随机字节读取 io.ReadFull短读 Go安全令牌生成
围绕 Go crypto/rand.Read 的 n、err 和长度边界,说明如何封装随机读取、测试短读错误,并在成功前阻止半成品随机数据进入业务。158 收藏 -
解释 Go slog LogValuer 递归引用为何会得到错误值,拆解 Value.Resolve 的有限求值、Group 边界、Handler 处理方式和四组测试。158 收藏 -
Go 的 io.MultiWriter 会把同一批字节按传入顺序写入多个 io.Writer,某个目标出错后立即停止。本文用文件和内存缓冲区示例说明用法、错误边界与并发注意事项。158 收藏 -
解释 Go slices.Delete 后 len、cap、尾部零值和外部引用如何共同影响内存释放,并给出清零、Clip 与 Clone 的选择清单。158 收藏 -
bbolt 的 View 回调里再次调用 Update 可能长期阻塞。本文解释单写事务与读事务的生命周期关系,给出读取结果复制到事务外、再独立写入的处理方式,以及回滚、告警和复盘清单。158 收藏 -
go-toml/v2 默认会忽略目标结构体没有的配置键。本文用 Decoder.DisallowUnknownFields 拒绝未声明字段,并说明 StrictMissingError、嵌套结构体与 map 的边界。158 收藏 -
Go 读取 CSV 时,字段中的逗号和换行必须放在双引号内,并交给 encoding/csv.Reader 解析。本文说明如何保留完整字段、区分列数错误与 ParseError,以及何时不该使用 LazyQuotes。157 收藏 -
Go 的 exec.Cmd.WaitDelay 不只是进程超时参数,它还限制子进程退出后 stdout/stderr 管道迟迟不关闭的等待时间。本文说明计时起点、ErrWaitDelay 与 ExitError 的区别,以及如何安全判断返回值。157 收藏 -
Go os/signal 的 channel 容量不是信号种类数量。本文从 Notify 的非阻塞发送、接收速度和退出生命周期出发,说明容量 1 何时足够,以及何时需要更大的缓冲。157 收藏 -
用 K comparable 和数值联合约束抽象 Go 求和逻辑,保留整数、浮点数及自定义数值类型的返回类型,并说明 ~、类型推断与边界。157 收藏 -
Go flag.Parse 放在 init 中并非语法错误,但可能早于同包其他 flag 的注册,导致未知参数、默认值未生效或参数边界被提前消费。本文用初始化顺序和 FlagSet 示例说明正确修复方式。157 收藏