golang如何处理PostgreSQL JSONB字段_golang PostgreSQL JSONB字段处理方法

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)——范式化
服务器·数据库·oracle
夜雪一千5 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
喜欢的名字被抢了5 小时前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程
能有时光5 小时前
PyTorch KernelAgent 源码解读 ---(4)--- ExtractorAgent
人工智能·pytorch·python
_Jimmy_6 小时前
Python 协程库如何使用以及有哪些使用场景
python
aqi006 小时前
15天学会AI应用开发(十七)使用LangGraph实现会话记忆功能
人工智能·python·大模型·ai编程·ai应用
Elastic 中国社区官方博客6 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
第一程序员6 小时前
Rust Agent 子进程执行:Command 之前,先定义输入和超时
python·rust·github
DLYSB_6 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔7 小时前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb