Arrays 实现扫描接口将json数组读入映射
我正在从PostgreSQL获取一个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
[]字符串
片段,但我真正想要的是映射[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不支持索引)