Go 客户端库
使用 InfluxDB Go 客户端库 将 InfluxDB 集成到 Go 脚本和应用程序中。
本指南假定您对 Go 和 InfluxDB 有一定的了解。如果您刚刚开始入门,请参阅InfluxDB 入门。
开始之前
将客户端包添加到你的项目依赖项中。
# Add InfluxDB Go client package to your project go.mod go get github.com/influxdata/influxdb-client-go/v2
确保 InfluxDB 正在运行并且你可以连接到它。有关连接到 InfluxDB OSS 或 InfluxDB Cloud 的 URL 信息,请参阅InfluxDB URLs。
InfluxDB Go 客户端库的样板代码
使用 Go 库从 InfluxDB 写入和查询数据。
在你的 Go 程序中,导入必要的包并指定你的可执行程序的入口点。
package main import ( "context" "fmt" "time" "github.com/influxdata/influxdb-client-go/v2" )
为你的 InfluxDB Bucket、组织和令牌定义变量。
bucket := "example-bucket" org := "example-org" token := "example-token" // Store the URL of your InfluxDB instance url := "http://localhost:8086"
创建 InfluxDB Go 客户端并传入
url
和token
参数。client := influxdb2.NewClient(url, token)
使用
WriteAPIBlocking
方法创建写入客户端,并传入org
和bucket
参数。writeAPI := client.WriteAPIBlocking(org, bucket)
要查询数据,请创建 InfluxDB 查询客户端并传入你的 InfluxDB
org
。queryAPI := client.QueryAPI(org)
使用 Go 将数据写入 InfluxDB
使用 Go 库将数据写入 InfluxDB。
创建一个数据点 (point),并使用 API 写入器结构体的
WritePoint
方法将其写入 InfluxDB。关闭客户端以刷新所有待处理的写入并完成。
p := influxdb2.NewPoint("stat", map[string]string{"unit": "temperature"}, map[string]interface{}{"avg": 24.5, "max": 45}, time.Now()) writeAPI.WritePoint(context.Background(), p) client.Close()
完整的写入脚本示例
func main() {
bucket := "example-bucket"
org := "example-org"
token := "example-token"
// Store the URL of your InfluxDB instance
url := "http://localhost:8086"
// Create new client with default option for server url authenticate by token
client := influxdb2.NewClient(url, token)
// User blocking write client for writes to desired bucket
writeAPI := client.WriteAPIBlocking(org, bucket)
// Create point using full params constructor
p := influxdb2.NewPoint("stat",
map[string]string{"unit": "temperature"},
map[string]interface{}{"avg": 24.5, "max": 45},
time.Now())
// Write point immediately
writeAPI.WritePoint(context.Background(), p)
// Ensures background processes finishes
client.Close()
}
使用 Go 从 InfluxDB 查询数据
使用 Go 库查询存储在 InfluxDB 中的数据。
创建一个 Flux 查询,并使用你的 Bucket 名称传递
bucket
参数。from(bucket:"<bucket>") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "stat")
查询客户端将 Flux 查询发送到 InfluxDB,并将结果作为具有表格结构的 FluxRecord 对象返回。
查询客户端包含以下方法
Query
:将 Flux 查询发送到 InfluxDB。Next
:迭代查询响应。TableChanged
:标识组键何时更改。Record
:返回上次解析的 FluxRecord,并提供对值和行属性的访问。Value
:返回实际的字段值。
result, err := queryAPI.Query(context.Background(), `from(bucket:"<bucket>")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "stat")`)
if err == nil {
for result.Next() {
if result.TableChanged() {
fmt.Printf("table: %s\n", result.TableMetadata().String())
}
fmt.Printf("value: %v\n", result.Record().Value())
}
if result.Err() != nil {
fmt.Printf("query parsing error: %s\n", result.Err().Error())
}
} else {
panic(err)
}
FluxRecord 对象包含以下访问你的数据的方法
Table()
:返回记录所属的表的索引。Start()
:返回当前表中所有记录的包含性下时间界限。Stop()
:返回当前表中所有记录的排他性上时间界限。Time()
:返回记录的时间。Value()
:返回实际的字段值。Field()
:返回字段名称。Measurement()
:返回记录的 measurement 名称。Values()
:返回列值的映射。ValueByKey(<your_tags>)
:从记录中返回给定列键的值。
完整的查询脚本示例
func main() {
// Create client
client := influxdb2.NewClient(url, token)
// Get query client
queryAPI := client.QueryAPI(org)
// Get QueryTableResult
result, err := queryAPI.Query(context.Background(), `from(bucket:"my-bucket")|> range(start: -1h) |> filter(fn: (r) => r._measurement == "stat")`)
if err == nil {
// Iterate over query response
for result.Next() {
// Notice when group key has changed
if result.TableChanged() {
fmt.Printf("table: %s\n", result.TableMetadata().String())
}
// Access data
fmt.Printf("value: %v\n", result.Record().Value())
}
// Check for an error
if result.Err() != nil {
fmt.Printf("query parsing error: %s\n", result.Err().Error())
}
} else {
panic(err)
}
// Ensures background processes finishes
client.Close()
}
有关更多信息,请参阅 GitHub 上的 Go 客户端 README。
此页面是否对您有帮助?
感谢您的反馈!