Почему protobuf не генерирует конструкторы?

При использовании go для генерации protobuf возникла проблема с отсутствием конструкторов, в отличие от java, где генерируется builder. Как можно получить эквивалентный результат без использования литералов в качестве параметров конструктора?
  • 22 сентября 2023 г. 16:17
Ответы на вопрос 1
Протокол Buffers (protobuf) -- это язык-независимый способ определения схемы данных и сериализации/десериализации структур данных. Протокол Buffers предоставляет механизм генерации кода на разных языках программирования, включая Go и Java.

Одна из причин, по которой protobuf не генерирует конструкторы в Go, заключается в том, что в Go конструкторы не требуется использовать в качестве способа инициализации структуры данных. В Go обычно используются литералы структуры или непосредственное присваивание значений полям структуры.

Однако, для удобства использования, вы можете вручную определить функцию-конструктор для создания экземпляра структуры protobuf. Например, для структуры с именем "MyMessage", вы можете определить функцию вида:

```go
func NewMyMessage(field1 string, field2 int32) *MyMessage {
    return &MyMessage{
        Field1: field1,
        Field2: field2,
    }
}
```

Эта функция-конструктор создает и инициализирует экземпляр структуры "MyMessage" с указанными значениями полей.

В целом, хотя protobuf не генерирует конструкторы в Go, вы можете легко создать их вручную для создания экземпляров структур protobuf с нужными значениями полей.
Похожие вопросы