在我的go应用程序进行的查询中使用group_concat遇到问题。
有人知道为什么FLOATS的group_concat在Go侧看起来像[] uint8吗?
似乎无法正确转换吸盘。
它肯定是浮动的,我可以在原始查询结果中看到它,但是当我在go中执行相同的查询并尝试扫描时,Go抱怨说它是[]uint8
而不是{{1} }(实际上是这样)尝试转换为浮点数会给我错误的值(并且它们的数量过多)。
例如,在数据库中,我查询并为有问题的列获取2个浮点数,如下所示:
[]float64
但是,在运行中,go看到的是"5650.50, 5455.00"
而不是[]uint8
。为什么会这样?如何解决这个问题以获得实际结果?
我的问题是,由于要使用的数据库的性质,我必须将此SQL与[]float64
一起使用,这是获取信息的最佳方法,更重要的是查询本身可以工作很好,返回函数需要的数据,但是由于类型问题,我现在无法读出它。对这些人并不陌生,但是Go今天不与我合作。
我很高兴了解为什么Go Go会以这种方式进行操作,并且很高兴学习处理它的方法。
示例:
group_concat
与实际数据库(不在我的应用程序中)连接时,实际结果为
SELECT ID, getDistance(33.1543,-110.4353, Loc.Lat, Loc.Lng) as distance,
GROUP_CONCAT(values) FROM stuff INNER JOIN device on device.ID = stuff.ID WHERE (someConditionsETC) GROUP BY ID ORDER BY ID
显然是2个浮点数。
从Go查询并尝试扫描时,相同的结果会产生uint8的一部分。如果我在范围内进行搜索并打印这些值,则得到的值将大于2,它们是"5650.00, 5850.50"
(字节) ),如下所示:
uint8
不确定Go希望我如何处理。
解决方案...。愚蠢的简单而不是显而易见的:
解决方案:
53,55,56,48,46,48,48
是的,现在很明显。
答案 0 :(得分:1)
GROUP_CONCAT返回一个字符串。因此,在Go语言中,您得到的是字节字符数组,而不是浮点数。您发布的结果delta
转换为字符串“ 5780.00”,看起来确实像是您的值之一。因此,您需要修复SQL以返回浮点数,或者在Go中使用字符串和strconv模块来解析并将字符串转换为浮点数。我认为前一种方法更好,但这取决于您。