PostgreSQL的jsonb字段在Go中需用json.RawMessage或自定义struct接收,不可直接scan到string或sql.NullString;写入NULL须用nil指针,查询时应避免SELECT 配合\[\]interface{}。PostgreSQL 的 jsonb 字段在 Go 中不能直接 scan 到 stringPostgreSQL 返回的 jsonb 是二进制格式,不是纯文本。如果用 Scan(&s) 扫到 string,会报错:sql: Scan error on column index 0: unsupported Scan, storing driver.Value type \[\]uint8 into type *string。正确做法是用 json.RawMessage 或自定义 struct 接收:json.RawMessage 最轻量,适合"先读再解析",避免重复 unmarshal定义 struct 并用 Scan 直接映射,要求字段结构稳定;否则容易 panic 或丢字段别用 interface{} + json.Unmarshal,Go 的 json 包对 interface{} 解析后类型不明确(比如数字全转 float64),后续取值易出错var data json.RawMessageerr := row.Scan(&data) // ? 正确// 后续可多次解析:json.Unmarshal(data, &v)用 sql.NullString 包装 jsonb 字段会失效sql.NullString 只能处理 PostgreSQL 的 text 或 varchar 类型,对 jsonb 无效。即使字段允许 NULL,直接扫进 sql.NullString 仍会触发上面那个 \[\]uint8 → string 的类型错误。真正支持 NULL 的 JSONB 接收方式只有两种:立即学习"go语言免费学习笔记(深入)";*json.RawMessage(指针,nil 表示 NULL)自定义类型,实现 sql.Scanner 和 driver.Valuer,内部用 json.RawMessage 存储别为了"看起来像 NullString"强行套壳,反而增加歧义和维护成本。 幻导航网 发现优质实用网站,开启网络探索之旅!
相关推荐
欢呼的太阳4 小时前
数据库设计Step by Step (10)——范式化夜雪一千5 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数喜欢的名字被抢了5 小时前
MySQL基础入门:从零理解数据库与SQL能有时光5 小时前
PyTorch KernelAgent 源码解读 ---(4)--- ExtractorAgent_Jimmy_6 小时前
Python 协程库如何使用以及有哪些使用场景aqi006 小时前
15天学会AI应用开发(十七)使用LangGraph实现会话记忆功能Elastic 中国社区官方博客6 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档第一程序员6 小时前
Rust Agent 子进程执行:Command 之前,先定义输入和超时DLYSB_6 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?儒雅的大叔7 小时前
MySQL数据库InnoDB数据恢复工具使用总结