# #go #protocol-buffers #open-telemetry
Вопрос:
Есть такое репо https://github.com/open-telemetry/opentelemetry-proto
Я заинтересован в сериализации данных в этой структуре: https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/logs/v1/logs.proto как описано здесь — > >https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/logs/v1/logs.proto
Я сгенерировал файлы Go с
make gen-go
таким образом, это создает файлы
$GOPATH/src/github.com/open-telemetry/opentelemetry-proto/gen/go/logs/v1
Я импортировал его с помощью (хотя я знаю, что это неправильный подход, потому что сгенерировано несколько файлов Go)
import otl "github.com/open-telemetry/opentelemetry-proto/gen/go/logs/v1"
В этом
type LogRecord struct {
есть такое поле:
Body *v11.AnyValue `protobuf:"bytes,5,opt,name=body,proto3" json:"body,omitempty"`
и я понятия не имею, как создать переменную такого типа из строки.
Имя файла имеет тип string, так что это просто 🙂
lr := amp;otl.LogRecord{
Name : "example1",
но как насчет тела?
Любое значение — это определение в github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1/common.pb.go но я понятия не имею, как преобразовать строку в этот тип.
Редактировать: Я «думаю», что понял это, но может ли кто-нибудь подтвердить, что это правильно?
package main
import (
"fmt"
"time"
"io/ioutil"
"log"
"github.com/golang/protobuf/proto"
pb "github.com/open-telemetry/opentelemetry-proto/gen/go/logs/v1"
v11 "github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1"
)
func main() {
nanos := time.Now().UnixNano()
avs := v11.AnyValue_StringValue{
StringValue : "test",
}
av := amp;v11.AnyValue{
Value : amp;avs,
}
lr := amp;pb.LogRecord{
Name : "syslog1",
TimeUnixNano : uint64(nanos),
Body : av,
}
fmt.Println(lr.GetName())
out, err:= proto.Marshal(lr)
if err != nil {
log.Fatal(err.Error())
}
if err := ioutil.WriteFile("data", out, 0644); err != nil {
log.Fatalln("Failed to write address book:", err)
}
}
Thank you. 🙂
btw
How do add some attributes to that structure?
Attributes []*v11.KeyValue `protobuf:"bytes,6,rep,name=attributes,proto3" json:"attributes,omitempty"`