Go语言技术文章
-
解释 Go 中 panic(nil) 看起来无法被 recover 读取的原因,区分 Go 版本、defer 调用位置和 typed nil 接口,并给出可复用的恢复与记录写法。293 收藏 -
Go strconv.AppendInt 可以把 int64 按指定进制直接追加到 []byte 日志缓冲区。本文说明返回值、base 参数、负数边界、容量复用和基准测试的正确用法,避免把追加结果丢失或把示意数据当成实测结论。293 收藏 -
Go 更新接口中,缺失字段、JSON null 和空字符串不是同一种含义。本文用 json.Decoder 与 json.RawMessage 保留字段存在性,再映射为可校验的三态结构,避免 PATCH 请求误覆盖数据。293 收藏 -
从公开 API 和 heap.Interface 两层拆开 Go heap.Remove、heap.Pop 与 Pop 方法的索引语义,掌握根节点出队、任意位置删除和索引维护的正确写法。293 收藏 -
解释 Go ed25519.VerifyWithOptions 为什么返回 error,以及签名无效、参数不合法、预哈希长度错误与公钥长度异常分别该怎么处理。293 收藏 -
用 Go embed.FS 把 SQL 迁移文件编译进二进制,按版本稳定排序,并通过 schema_migrations 与事务安全执行。293 收藏 -
Go 的 multipart: message too large 不只是文件太大。本文区分请求体总量、非文件字段内存预算和文件临时落盘,给出 ParseMultipartForm 与 MultipartReader 的处理方案。293 收藏 -
Participle 的错误对象已经携带 lexer.Position,可以用 errors.As 提取 ParseError,输出文件名、行号、列号和 Message,并正确区分普通错误。293 收藏 -
bytes.Buffer.Available 返回的是底层缓冲区尚未使用的容量,不是当前可读数据长度。本文结合 Len、Cap、Grow 和 AvailableBuffer,说明如何判断追加空间并安全复用缓冲区。293 收藏 -
用 Go html/template 处理用户可控 href 时,单靠 HTML 转义并不够。本文从协议注入风险出发,演示安全 URL 过滤、模板上下文转义与表格驱动回归测试。292 收藏 -
Golang · Go教程 | 1个月前 | 标准库 · golang · 性能优化 · bytes.Buffer · Go bytes.Buffer 切片容量 AvailableBuffer 零分配
bytes.Buffer.AvailableBuffer 可以把格式化结果直接追加到缓冲区的可用容量中,但返回切片只适合紧接着传给同一个 Buffer 的 Write。本文用循环拼接日志的例子说明 Len、Cap、Available 与下一次写入之间的边界,以及什么时候不该保存这段切片。292 收藏 -
WalkDir 返回的是跨平台的 fs 逻辑路径,不是通用的磁盘绝对路径。本文用根目录封装、filepath.FromSlash 和边界判断,说明如何把结果安全交给外部工具。292 收藏 -
Go 追加日志却清空原文件,通常是 OpenFile 组合了 O_TRUNC。本文解释 O_APPEND、O_CREATE、O_TRUNC 的区别,并给出可复用的安全追加写法与并发边界。292 收藏 -
用 Go 1.22+ 的 net/http ServeMux 集中注册 /api/v1 公共前缀路由,讲清方法模式、动态段、子树斜杠和冲突边界。292 收藏 -
Go regexp.Longest 适合放在 token 候选识别层:它改变同一个正则的左侧最长匹配偏好,但不负责多条词法规则的全局仲裁、优先级或 Parser 语法组合。292 收藏