Go 从Firestore中提取地图对象,获取随机垃圾

Go 从Firestore中提取地图对象,获取随机垃圾,go,google-cloud-platform,google-cloud-firestore,Go,Google Cloud Platform,Google Cloud Firestore,我正在使用Go尝试从Firestore中提取一些文档,但遇到了一堵相当大的墙:无论我多么努力,我都无法从查询本身提取数据。当我打印doc.Data()或任何内容时,它工作正常: map[Ext: ID:107677035991703552 Kind:link Start:0.0 Stop:8.0 URL:ONHPHmNV0m4] 我有: iter:=client.Collection(“intro requests”).Documents(ctx) 为了{ doc,err:=iter.Next

我正在使用Go尝试从Firestore中提取一些文档,但遇到了一堵相当大的墙:无论我多么努力,我都无法从查询本身提取数据。当我打印
doc.Data()
或任何内容时,它工作正常:

map[Ext: ID:107677035991703552 Kind:link Start:0.0 Stop:8.0 URL:ONHPHmNV0m4]
我有:

iter:=client.Collection(“intro requests”).Documents(ctx)
为了{
doc,err:=iter.Next()
如果err==iterator.Done{
打破
}
var临时请求
文件数据发送到(&temp)
fmt.Println(温度)
请求=追加(请求,临时)
对于u,请求:=范围请求{
fmt.Println(doc.Data())
createVote(s,请求)
}
fmt.Println(doc.Data())
}
根据谷歌的例子,但是打印
temp
,我得到如下结果:

{link 0}
但有时也会这样:

{0}
有时这是:

{HPHMNV0M4上的链接0}
有什么好处?我甚至不知道这里发生了什么。我也找不到任何其他有效的例子,因为谷歌的所有例子都不需要再进一步,只需打印地图,它在100%的时间里都能正常工作。这几乎让人感觉映射被转换成了字节数组之类的东西,而程序只是试图从中提取一些数字

这是我的班级:

类型请求结构{
ID字符串`json:“ID”`
种类字符串`json:“种类”`
Start float64`json:“Start”`
Stop float64`json:“Stop”`
URL字符串`json:“URL”`
Ext字符串`json:“Ext”`
}

我尝试过使用第三方反序列化包,但没有任何改变。。。有什么线索吗?

发现Go不能反序列化
Float64
,只能反序列化
Nil
Bool
Int64
String
。奇怪的是,类型错误之类的东西会导致这种行为


我将我的
float64
s切换为
string
s,然后只使用了
strconv.ParseFloat()
。问题已解决

已更新以显示更多代码。对不起,我指的是“接口”,不是实例。我还没喝咖啡。。。这两个问题都得到了更新。
map[string]接口
就是
doc.DataTo()
给出的。我想我的措辞很糟糕。来自Google:“DataTo使用文档的字段填充p,p可以是指向map[string]接口{}的指针,也可以是指向结构的指针。”。在本例中,我尝试将其移动到structNo error;它运行良好。但是当我打印出
temp
,我会得到上面列出的一个奇怪的随机答案。哦,哈哈,我明白了。我是新来的,老习惯。下面是它所说的:
main.Request.Stop:firestore:无法将类型float64设置为string
我从谷歌找到了这个:-Null转换为nil。-布尔转换为布尔字符串转换为字符串。-整数转换为int64。设置结构字段时,任何有符号或无符号的字段。听起来它可能不支持浮动?看起来应用程序正在尝试将float64设置为字符串。添加此代码以查找类型不匹配:
对于k,v:=range doc.Data(){fmt.Printf(“%s:%T\n”,k,v)}
。将输出与struct fields中的类型进行比较。DataTo支持float64值,如中所述。问题是类型不匹配。Go客户端不支持将字符串解码为float64,反之亦然。Go中的类肯定是float64,但您在Firebase中无法获得该级别的控制(我将其设置为“number”)。按照您所说的,我猜这就是类型不匹配的地方。数据库中的值是字符串,这就是上面报告的错误消息的状态。