登录
首页 >  Golang >  Go问答

如何正确导入protobuf的文件?

来源:stackoverflow

时间:2024-04-15 20:45:35 474浏览 收藏

本篇文章给大家分享《如何正确导入protobuf的文件?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

city.proto 文件中,我想使用(导入)protobuf 的 .proto 文件。在我的 golang 应用程序中,我使用 go 模块。

city.proto

syntax = "proto3";

package proto;

import "google/protobuf/timestamp.proto";

option go_package = "./proto";

message city {
    google.protobuf.timestamp create_at = 1;
}

当我尝试从 city.proto 文件生成代码时,会引发此类错误:

google/protobuf/timestamp.proto: file not found.
city.proto:3:1: import "google/protobuf/timestamp.proto" was not found or had errors.
city.proto:25:5: "google.protobuf.timestamp" is not defined.

我在 grpc 项目的目录中创建了一个 proto 文件夹。 city.proto 文件位于此文件夹中。我运行这样的命令:

protoc -i proto/ proto/city.proto --go_out=plugins=grpc:proto/city.

此命令仅在我不在 proto 文件中使用 import 的情况下才有效。

go版本

go version go1.12.9 windows/amd64

协议--版本

libprotoc 3.11.4

回显%gopath%

c:\users\nnogerbek\go

在该目录中,我看到三个具有以下结构的文件夹:

bin
    protoc.exe
    protoc-gen-go.exe
pkg
    mod
        **packages**
src
    google.com
        protobuf
            timestamp.proto

我运行这样的命令:

go list -f "{{ .path }} {{ .dir }}" -m github.com/golang/protobuf

命令结果:

github.com/golang/protobuf C:\Users\NNogerbek\go\pkg\mod\github.com\golang\[email protected]

解决方案


经过多次尝试,我找到了一种使用以下命令生成 go 代码到我的 grpc 服务器且没有错误的方法:

protoc -I. -I%GOPATH%/src --gogofaster_out=plugins=grpc:. proto/city.proto

正如您在命令中看到的,我指定了 protobuf 文件所在的 src 文件夹的路径。

我还使用了gogoprotobuf包的gogofaster插件。

今天关于《如何正确导入protobuf的文件?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>