Просто хотите проверить, есть ли способ получить все имена бинов для каждой записи?aerospike, golang - получить все имена bin для всех записей
Я знаю, мы сможем получить binmap
, используя следующий код. Но я хочу прочитать все ключи и создать map[string]interface{}
, а затем преобразовать эту карту в массив байтов.
Это мой код, чтобы получить все контейнеры, добавить их в массив, преобразовать массив в массив байт:
package main
import (
"bytes"
"encoding/gob"
"fmt"
as "github.com/aerospike/aerospike-client-go"
"strconv"
"time"
)
var client *as.Client
func main() {
stmt := as.NewStatement("txn", "user")
stmt.Addfilter(as.NewEqualFilter("p", "param"))
rs, err := GetAerospikeClient().Query(nil, stmt)
if err == nil {
//Conv to byte array
var ret []interface{}
for res := range rs.Results() {
if res.Err != nil {
// handle error here
// if you want to exit, cancel the recordset to release the resources
fmt.Println("Err------", res.Err)
} else {
// process record here
fmt.Printf("Success------%#v\n", res.Record.Bins)
ret = append(ret, res.Record.Bins)
}
}
b, _ := GetBytes(ret)
fmt.Println("Len of byte array ", len(b))
}
}
func GetAerospikeClient() *as.Client {
var err error
port, _ := strconv.Atoi("3000")
maxconn, _ := strconv.Atoi("10")
host := "172.28.128.3"
timeout, _ := strconv.Atoi("50")
idletimeout, _ := strconv.Atoi("3600")
clientPolicy := as.NewClientPolicy()
clientPolicy.ConnectionQueueSize = maxconn
clientPolicy.LimitConnectionsToQueueSize = true
clientPolicy.Timeout = time.Duration(timeout) * time.Millisecond
clientPolicy.IdleTimeout = time.Duration(idletimeout) * time.Second
client, err = as.NewClientWithPolicy(clientPolicy, host, port)
if err != nil {
panic(err)
}
return client
}
func GetBytes(key []interface{}) ([]byte, error) {
var buf bytes.Buffer
gob.Register(as.BinMap{})
gob.Register([]interface{}{})
enc := gob.NewEncoder(&buf)
err := enc.Encode(key)
if err != nil {
panic(err)
return nil, err
}
return buf.Bytes(), nil
}
Благодарность
добавлена полная основная функция сейчас .... – Raaghu