私のユースケースでは、influxdb を使用しています。Golang で influxdb へのグローバル クライアントを作成しようとしています。しかし、関数から influxdb クライアントを返すと、クライアント オブジェクトは influxdb パッケージにエクスポートされません。ですから、これを返すことはできません。
これが私のコードです:
package influxclient
import (
"github.com/influxdata/influxdb/client/v2"
"log"
"time"
//"net/http"
"fmt"
"reflect"
)
const (
INFLUXDB_NAME = "XXXX"
USERNAME = "YYYY"
PASSWORD = "ZZZZ"
HOST = "http://localhost:8086"
)
var (
c = getHTTPClient()
)
func test() {
// Create a new point batch
bp, _ := client.NewBatchPoints(client.BatchPointsConfig{
Database: INFLUXDB_NAME,
Precision: "s",
})
// Create a point and add to batch
tags := map[string]string{"cpu": "cpu-total"}
fields := map[string]interface{}{
"idle": 10.1,
"system": 53.3,
"user": 46.6,
}
fmt.Println(reflect.TypeOf(c))
pt, _ := client.NewPoint("cpu_usage", tags, fields, time.Now())
bp.AddPoint(pt)
// Write the batch
c.Write(bp)
}
//publish metrics to metrics db
func PublishMetrics(metricName string, tags map[string]string, fields map[string]interface{}, time time.Time) error {
fmt.Println("type of client c ", reflect.TypeOf(c))
// Create a new point batch
bp, err := client.NewBatchPoints(client.BatchPointsConfig{
Database: INFLUXDB_NAME,
Precision: "s",
})
if err != nil {
return err
}
pt, err := client.NewPoint(metricName, tags, fields, time)
if err != nil {
return err
}
bp.AddPoint(pt)
// Write the batch
c.Write(bp)
return nil
}
func getHTTPClient() *client.client {
//make http client for metrics db
c, err := client.NewHTTPClient(client.HTTPConfig{
Addr: HOST,
Username: USERNAME,
Password: PASSWORD,
})
if err != nil {
log.Printf("FATAL :: Error occured in getting influxdb metric client %s ", err.Error())
}
return c
}
getHTTPClient()
関数はクライアント オブジェクトを返そうとしています*client.client
。
ただし、クライアント オブジェクトは influxdb golang パッケージではエクスポートされません。
では、どうすればこの問題を処理できますか?
誰でもこれで私を助けることができますか?
ありがとう