opentelemetry-путь импорта прото и любое значение

# #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"`