我正在尝试将influxdb record
(类型:[]interface{}
)转换为[]string
,以便可以将其写入csv。
[2018-12-20T07:26:23Z 90 123.2132 12.3232 30 1个用户]
s := make([]string, len(record))
for i, v := range record {
s[i] = v.(string)
}
但是我遇到了这个错误
接口{}是json.Number,不是字符串
我是golang的新手,对接口和json不太熟悉
答案 0 :(得分:1)
我相信您的记录数组是由数据库驱动程序生成的:
record := make([]interface{}, 0, 10)
dec := json.NewDecoder(strings.NewReader(`["2018-12-20T07:26:23Z", 90, 123.2132, 12.3232, 30, 1, "user"]`))
dec.UseNumber()
dec.Decode(&record)
所有数字均生成为json.Number
而不是float64
。由于json.Number
支持简单的字符串转换,因此您可以将该接口与简单的type switch一起使用:
s := make([]string, len(record))
for i, v := range record {
switch val := v.(type) {
case string:
s[i] = val
case json.Number:
s[i] = val.String()
default:
panic(fmt.Sprintf("unhandled type: %T", v))
}
}