Arrays 实现扫描接口将json数组读入映射

Arrays 实现扫描接口将json数组读入映射,arrays,json,go,Arrays,Json,Go,我正在从PostgreSQL获取一个JSON数组,我想把它读入一个映射。我能够将值解组为[]字符串片段,但我真正想要的是映射[string]bool 我为该列编写了一个自定义类型,该列带有一个扫描接口,该接口首先将JSON数组转换为一段字符串,然后将每个字符串作为键读入自定义映射类型 type custMap map[string]bool func (m *custMap) Scan(src interface{}) error { b, ok := src.([]byte) if

我正在从PostgreSQL获取一个JSON数组,我想把它读入一个映射。我能够将值解组为
[]字符串
片段,但我真正想要的是
映射[string]bool

我为该列编写了一个自定义类型,该列带有一个扫描接口,该接口首先将JSON数组转换为一段字符串,然后将每个字符串作为键读入自定义映射类型

type custMap map[string]bool

func (m *custMap) Scan(src interface{}) error {
  b, ok := src.([]byte)
  if !ok {
    return error(errors.New("Error Scanning Array"))
  }

  s := make([]string, 0)
  json.Unmarshal(b, &s)
  for _, v := range s {
    (*m)[v] = true
  }

  return nil
}


type data struct {
  vals custMap `json: "vals"`
}
我试图扫描的查询返回一行,其中包含一列VAL,该列是JSON数组:
[“some”、“arr”、“vals”]
,其中自定义类型的用法如下:

var d models.data
sqlDB.QueryRow().Scan(&d.vals)
我的预期输出是具有以下形状的结构

{ vals: map[string]bool { "some": true, "arr": true, "vals": true }
这可以很好地编译,但我的代码对“分配到nil映射中的条目”感到恐慌

如何修复扫描功能?甚至可以使用贴图类型执行此操作吗

映射是一种类型的无序元素组,称为 元素类型,由另一种类型的一组唯一键索引,称为 键类型。未初始化映射的值为零

使用内置函数make生成一个新的空映射值,该函数 将映射类型和可选容量提示作为参数:

make(map[string]int)
make(map[string]int, 100)
初始容量并不限制其大小:地图会根据需要进行扩展 除nil映射外,存储在其中的项目数。A. nil映射相当于空映射,但不能包含任何元素 补充说

我没有看到一个
make
来初始化映射:“一个
nil
映射相当于一个空映射,只是不能添加任何元素。”

映射是一种类型的无序元素组,称为 元素类型,由另一种类型的一组唯一键索引,称为 键类型。未初始化映射的值为零

使用内置函数make生成一个新的空映射值,该函数 将映射类型和可选容量提示作为参数:

make(map[string]int)
make(map[string]int, 100)
初始容量并不限制其大小:地图会根据需要进行扩展 除nil映射外,存储在其中的项目数。A. nil映射相当于空映射,但不能包含任何元素 补充说


我没有看到一个
make
来初始化你的映射:“一个
nil
映射相当于一个空映射,只是不能添加任何元素。”

你在一个单元化映射上调用
*custMap
类型的方法
Scan
。初始化
d.vals

d.vals = custMap{}


其他答案已经提供了解释。

您正在统一地图上调用类型为
*custMap
的方法
Scan
。初始化
d.vals

d.vals = custMap{}


其他答案已经提供了解释。

请提供源代码的行号和错误消息。我怀疑错误发生在
(*m)[v]=true
行,但那只是我的怀疑。是的!这就是我得到'assignment to entry in nil map'的地方。抛出的具体错误是0http:panic serving[::1]:59847:assignment to entry in nil map。我知道这是那一行,因为在我第一次尝试时,我没有在那里使用指针:m[v]=true,这导致了此编译错误:无效操作:m[v](type*SCMap不支持索引)请提供源代码的行号和错误消息。我怀疑错误发生在
(*m)[v]=true
行,但那只是我的怀疑。是的!这就是我得到'assignment to entry in nil map'的地方。抛出的具体错误是0http:panic serving[::1]:59847:assignment to entry in nil map。我知道这是那一行,因为在我第一次尝试这一行时,我没有在那里使用指针:m[v]=true,这导致了这个编译错误:无效操作:m[v](type*SCMap不支持索引)