제 경우에는 influxdb를 사용하고 있습니다. Golang의 글로벌 클라이언트 인 influxdb를 만들려고합니다. 그러나 함수에서 influxdb 클라이언트를 반환하면 클라이언트 객체가 influxdb 패키지로 내보내지지 않습니다. 그래서 나는 이것을 돌려 줄 수 없다.타사 패키지의 내 보낸 개체를 golang의 반환 유형으로 사용하는 방법은 무엇입니까?
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 패키지에서 내 보내지 않습니다.
그래서이 문제를 어떻게 처리 할 수 있습니까?
아무도 도와 줄 수 있습니까?
감사
을 /client.go#L78,'Client'는 인터페이스 타입으로 export됩니다. 'Client' 유형도 NewHTTPClient''에서 무엇을 반환하는 것입니다 (https://github.com/influxdata/influxdb/blob/master/client/v2/client.go#L95). 다른 유형을 찾고 있습니까? – abhink
그래서 어떤 종류의 오류가 있습니까? –
@SalvadorDali - 소문자 'client'에 대해 다음과 같은 오류가 발생했습니다. '../influxclient/influxclient.go:67 : 내 보낸 이름을 참조 할 수 없습니다. client.client ../influxclient/influxclient.go : 67 : undefined : client.client' – Dany