Go语言技术文章
-
Go 里接口自身为 nil 与接口持有 typed nil 不是一回事,reflect.ValueOf(nil) 还会得到无效 Value。本文给出带 IsValid 和 Kind 防护的安全判断函数,避免反射判断直接 panic。105 收藏 -
Go database/sql 中,rows.Close 后仍可调用 rows.Err。本文区分迭代错误、扫描错误和驱动关闭错误,给出读取型查询与提前关闭时不丢错的写法。136 收藏 -
用 Go encoding/hex 把固定长度字节稳定编码为统一小写、可排序比较的字符串,解释 [N]byte、前导零、长度公式和文本比较的边界。175 收藏 -
Go 的 database/sql 中,QueryRow 没有记录不会立即返回错误,而是把结果放进占位 Row,直到 Scan 才返回 sql.ErrNoRows。本文说明延迟错误的原因、错误分支、NULL 字段和多行查询的选择。206 收藏 -
讲清 Go base64.NewEncoder 的尾部缓冲、Close 刷新和 Writer 错误传递,给出基于 io.Copy 的流式编码写法。107 收藏 -
Go 的 regexp.Compile 失败时,先区分正则语法错误与匹配不到,再用 regexp/syntax.Error 读取错误类型和问题表达式,最后处理动态规则与 MustCompile 的边界。318 收藏 -
用 Go 的 crypto/rand.Int 生成 [0,n) 范围内均匀分布的随机下标,说明 big.Int 上界、拒绝采样、空切片和错误处理。194 收藏 -
Go 模板 Parse 成功只说明模板文本通过了解析,Execute 仍可能因结构体字段、map 键、方法、函数注册、嵌套模板或 Writer 错误而失败。本文按执行边界整理排查顺序和最小示例。296 收藏 -
Go 使用 crypto/ed25519 验证带上下文的签名时,要让 message、Options.Context 和 PublicKey 在两端保持一致。本文用规范化消息和 VerifyWithOptions 示例说明常见失败原因。416 收藏 -
Go 的 os.File.Close 会返回 error。本文按文件用途和错误阶段说明什么时候必须返回、什么时候可记录,并给出同时处理 Write、Flush、Close 的写法。172 收藏 -
Go 校验接口 HMAC 签名时,不要用普通字符串比较。本文用 crypto/hmac 和 hmac.Equal 说明摘要重算、编码边界、请求体一致性与常见排查方法。425 收藏 -
Go 的 os.ReadFile 面向普通文件,传入目录时出现错误通常是路径类型不匹配。本文解释 *os.PathError 的含义,并给出目录读取与错误判断的正确写法。254 收藏 -
用 Go log/slog 的 Logger.With 在请求入口固定 request_id、method 和 path,再把派生 Logger 传入服务层,让 JSONHandler 输出一致的请求属性,并避开全局污染与敏感字段泄露。149 收藏 -
Go 用 os.Stat 判断文件是否存在时,不能把所有非 nil 错误都当成不存在。本文区分缺失、权限不足和其他系统错误,并给出 errors.Is 的安全写法。471 收藏 -
Go 多子命令程序不要把参数全部注册到全局 flag.CommandLine。本文用 flag.FlagSet 为每个子命令划分参数、错误输出和校验边界,并给出可复用的实现骨架。245 收藏