gpt4 book ai didi

sql - 在 FLOATS 上使用 GROUP_CONCAT 进行 SQL 查询的 Go 应用程序返回 []uint8 而不是实际的 []float64

转载 作者:IT王子 更新时间:2023-10-29 02:07:06 27 4
gpt4 key购买 nike

在我的 go 应用程序进行的查询中使用 group_concat 时遇到问题。

知道为什么 FLOATS 的 group_concat 在 Go 端看起来像 []uint8 吗?

似乎也无法正确转换吸盘。

它肯定是 float 的,我可以在原始查询结果中看到它,但是当我在 go 中执行相同的查询并尝试扫描结果时,Go 提示它是一个 []uint8 而不是[]float64(它实际上是)尝试转换为 float 给了我错误的值(而且太多了)。

例如,在数据库中,我查询并为相关列获取 2 个 float ,如下所示:

"5650.50, 5455.00"

然而,在 go 端,go 看到的是 []uint8 而不是 []float64。为什么会这样?如何解决此问题以获得实际结果?

我的问题是我必须将此 SQL 与 group_concat 一起使用,由于我正在使用的数据库的性质,这是获取信息的最佳方式,更重要的是查询本身运行良好,返回函数需要的数据,但现在由于类型问题我无法读取它。对那些并不陌生,但 Go 今天没有与我合作。

我会非常高兴地了解为什么 go 是这样做的,并且很高兴地了解一种处理它的方法。

例子:

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

与实际数据库(不在我的应用程序中)交互时的实际结果是

"5650.00, 5850.50"

显然是 2 个 float 。

当从 Go 查询并尝试扫描结果时,相同的结果会产生一个 uint8 的片段。如果我遍历并打印这些值,我得到的结果会超过 2,它们是 uint8(字节)看起来像这样:

53,55,56,48,46,48,48

不确定 Go 希望我如何处理这个问题。

解决方案....愚蠢简单但不是很明显:

解决方案:

crazyBytes := []uint8("5760.00,5750.50")
aString := string(crazyBytes)
strSlice := strings.Split(aString,",") // string representation of our array (of floats)
var floatz []float64
for _, x := range strSlice {
fmt.Printf("At last, Float: %s \r\n",x)
f,err := strconv.ParseFloat(x,64)
if err != nil { fmt.Printf("Error: %s",err) }
floatz = append(floatz, f)
fmt.Printf("as float: %s \r\n", strconv.FormatFloat(f,'f',-1,64))
}

是的,现在很明显。

最佳答案

GROUP_CONCAT 返回一个字符串。所以在 Go 中你得到一个字符的字节数组,而不是一个 float 。您发布的结果 53,55,56,48,46,48,48 转换为字符串“5780.00”,它看起来确实像您的值之一。因此,您需要修复 SQL 以返回 float ,或者在 Go 中使用字符串和 strconv 模块来解析字符串并将其转换为 float 。我认为前一种方法更好,但这取决于您。

关于sql - 在 FLOATS 上使用 GROUP_CONCAT 进行 SQL 查询的 Go 应用程序返回 []uint8 而不是实际的 []float64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com