gpt4 book ai didi

go - 如何在.proto文件中正确导入go模型

转载 作者:行者123 更新时间:2023-12-02 02:18:10 26 4
gpt4 key购买 nike

我目前正在致力于使用 protobuf 将我们基于 Rest api 的 go 服务迁移到 gRPC。我正在使用互联网上的一些示例,我的 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)如果是,正确的语法是什么?

我对此很陌生,所以如果这个问题看起来很愚蠢,那就笑一笑然后忘记。

最佳答案

一个名为 CreateRequest.go 的模型文件,我可以将其导入到这个 .proto 文件中” - 这不是方法。要使用原型(prototype)文件,1)创建你的 api.proto 文件,不要忘记在其中添加一个类似“package apiv1”的包。2) 使用 protogen-go 将原型(prototype)编译为 api.pb.go3)创建一个“apihandler.go”文件并在该文件中“import apivi”。因此,您要将原始生成的包“apivi”导入到“apihandler.go”文件中。

与其为请求和响应使用单独的 .proto 文件,不如根据您的 api 版本或项目的任何合理组件将它们分开。

关于go - 如何在.proto文件中正确导入go模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com