Как правильно импортировать модель го в файл .proto

В настоящее время я работаю над переносом нашей оставшейся службы go на основе api на gRPC, используя protobuf. Я использую пример из Интернета, мой файл service.proto похож на

syntax = "proto3";
package v1;

import "google/protobuf/timestamp.proto";

// Taks we have to do
message ToDo {
    // Unique integer identifier of the todo task
    int64 id = 1;
    // Title of the task
    string title = 2;
    // Detail description of the todo task
    string description = 3;
    // Date and time to remind the todo task
    google.protobuf.Timestamp reminder = 4;
}

// Request data to create new todo task
message CreateRequest{
    // API versioning: it is my best practice to specify version explicitly
    string api = 1;

    // Task entity to add
    ToDo toDo = 2;
}

// Response that contains data for created todo task
message CreateResponse{
    // API versioning: it is my best practice to specify version explicitly
    string api = 1;

    // ID of created task
    int64 id = 2;
}

// Service to manage list of todo tasks
service ToDoService {
    // Create new todo task
    rpc Create(CreateRequest) returns (CreateResponse);
}

Теперь в данном фрагменте мы видим, что определяем все запросы и ответы в одном и том же файле .proto.

Я хочу определить их в другом файле go, чтобы их можно было использовать во всем проекте, например, у меня есть файл модели с именем CreateRequest.go, и каким-то образом я могу импортировать его в этот файл .proto и для остальной части проекта. Я также могу использовать эту модель CreateRequest, чтобы мне не приходилось определять одну и ту же модель дважды.

1) Можно ли это сделать?

2) Если да, то какой для этого правильный синтаксис?

Я новичок в этом, поэтому, если вопрос выглядит глупо, просто посмейтесь и забудьте.


person whishky    schedule 14.11.2019    source источник
comment
Это работает наоборот. Источником истины для вас являются *.proto файлы, из которых вы создаете свои файлы Go.   -  person Markus W Mahlberg    schedule 14.11.2019
comment
Вы можете определить model.proto файл, импортировать его в свой основной файл прототипа и скомпилировать model.proto файл в любом месте структуры вашего проекта.   -  person Emin Laletovic    schedule 14.11.2019


Ответы (1)


«файл модели с именем CreateRequest.go, и я каким-то образом могу импортировать его в этот файл .proto» - это не способ. Чтобы использовать файл proto, 1) Создайте файл api.proto и не забудьте добавить в него пакет вроде "package apiv1". 2) Скомпилируйте ваш прототип в api.pb.go с помощью protogen-go. 3) Создайте файл «apihandler.go» и «импортируйте apivi» в этот файл. Итак, вы импортируете сгенерированный прототип пакет «apivi» в свой файл «apihandler.go».

И вместо того, чтобы иметь отдельные файлы .proto для запросов и ответов, лучше разделить их на основе ваших версий api или любых разумных компонентов вашего проекта.

person kee    schedule 20.11.2019