如何检查 Influxdb 查询在 Go 中是否没有返回任何记录?

问题描述 投票:0回答:1

我有一个简单的查询,可以检索给定时间范围内的测量值:

query := fmt.Sprintf(`from(bucket: "mybucket")
    |> range(start: time(v: %d), stop: time(v: %d))
    |> filter(fn: (r) => r["_measurement"] == "Xnode")
    |> filter(fn: (r) => r["serial"] == "%s")
    |> filter(fn: (r) => r["_field"] == "value")
    |> mean()
    `, start, end, serial)

    results, err := db.Api.Query(context.Background(), query)

    values := results.Record().Values()
    return core.ShiftResults{
        Begin:   start,
        End:     shiftend,
        Gasname: values["name"].(string),
        Value:   values["_value"].(float64)}, nil

但是,当查询不存在的序列号时,程序会panic:

panic({0x6cd740?, 0x96ff70?})
    /usr/local/go/src/runtime/panic.go:920 +0x270
github.com/influxdata/influxdb-client-go/v2/api/query.(*FluxRecord).Values(0xc00007a190?)
    /go/pkg/mod/github.com/influxdata/influxdb-client-go/[email protected]/api/query/table.go:199

它适用于现有设备和现有数据。 如何检查空结果以避免恐慌?

go influxdb
1个回答
0
投票

我非常确定问题是由于访问

results.Record().Values()
造成的,即使它是空的。

API 建议首先检查返回的错误,然后在访问结果之前

result.Next()
。请参阅示例此处

© www.soinside.com 2019 - 2024. All rights reserved.