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.UnmarshalGo 的 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”强行套壳反而增加歧义和维护成本。 幻导航网 发现优质实用网站,开启网络探索之旅