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 正在运行并且您可以连接到它。有关使用哪个 URL 连接到 InfluxDB OSS 或 InfluxDB Cloud 的信息,请参见 InfluxDB URLs。
InfluxDB Go客户端库的样板代码
使用Go库从InfluxDB中写入和查询数据。
在你的Go程序中,导入必要的包并指定可执行程序的入口点。
package main import ( "context" "fmt" "time" "github.com/influxdata/influxdb-client-go/v2" )为您的 InfluxDB bucket、organization 和 token 定义变量。
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 writer 结构体的
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参数,参数值为您的存储桶名称。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(): 返回记录的测量名称。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()
}
欲了解更多信息,请参阅 Go客户端的README在GitHub上。