文档文档

Go 客户端库

使用 InfluxDB Go 客户端库 将 InfluxDB 集成到 Go 脚本和应用程序中。

本指南假定您对 Go 和 InfluxDB 有一定的了解。如果您刚刚开始入门,请参阅InfluxDB 入门

开始之前

  1. 安装 Go 1.13 或更高版本.

  2. 将客户端包添加到你的项目依赖项中。

    # Add InfluxDB Go client package to your project go.mod
    go get github.com/influxdata/influxdb-client-go/v2
    
  3. 确保 InfluxDB 正在运行并且你可以连接到它。有关连接到 InfluxDB OSS 或 InfluxDB Cloud 的 URL 信息,请参阅InfluxDB URLs

InfluxDB Go 客户端库的样板代码

使用 Go 库从 InfluxDB 写入和查询数据。

  1. 在你的 Go 程序中,导入必要的包并指定你的可执行程序的入口点。

    package main
    
    import (
        "context"
        "fmt"
        "time"
    
        "github.com/influxdata/influxdb-client-go/v2"
    )
    
  2. 为你的 InfluxDB Bucket组织令牌定义变量。

    bucket := "example-bucket"
    org := "example-org"
    token := "example-token"
    // Store the URL of your InfluxDB instance
    url := "http://localhost:8086"
    
  3. 创建 InfluxDB Go 客户端并传入 urltoken 参数。

    client := influxdb2.NewClient(url, token)
    
  4. 使用 WriteAPIBlocking 方法创建写入客户端,并传入 orgbucket 参数。

    writeAPI := client.WriteAPIBlocking(org, bucket)
    
  5. 要查询数据,请创建 InfluxDB 查询客户端并传入你的 InfluxDB org

    queryAPI := client.QueryAPI(org)
    

使用 Go 将数据写入 InfluxDB

使用 Go 库将数据写入 InfluxDB。

  1. 创建一个数据点 (point),并使用 API 写入器结构体的 WritePoint 方法将其写入 InfluxDB。

  2. 关闭客户端以刷新所有待处理的写入并完成。

    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 中的数据。

  1. 创建一个 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


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像目前一样使用它,而无需对代码进行任何更改。

阅读更多

现已正式发布

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩功能,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看