golang proto import 路径问题 和 google protobuf

背景

记录使用proto做gprc接口的几个小坑,基于goland ide

import

写proto时,有时候需要引入其它proto,之后会发现goland提示import路径不存在
(img-51fX3h1c-1610524640721)(/img/bVcNrkr)]

注意,这里只是goland插件提示而已,与实际生成无关,只需要在插件路径中,加入你proto的路径即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6yt3II7j-1610524640725)(/img/bVcNrkL)]

而在实际生成pb文件时,只需要在命令中,通过-I加入关联的目录即可

protoc --go_out=plugins=grpc:. -I=${GOPATH}/src -I=. *.proto

google protobuf

很多时候,我希望引用google成熟的proto,比如"google/protobuf/empty.proto",然后我去github上搜索,搜索出来的库里也确实有这些proto,但是混杂了很多其它的文件,而且目录也不是google/protobuf/
其实这个文件已经完整的放在了下载protoc这个工具的包里,只是当时没注意,在include这个目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9O8TGIm-1610524640730)(/img/bVcNrnR)]

### Golang Protocol Buffers 使用教程 #### 安装 Protocol Buffers 编译器 为了在 Go 应用程序中使用 Protocol Buffers,需要先安装 `protoc` 编译器。该编译器负责将 `.proto` 文件转换成目标语言的源代码文件[^5]。 可以按照官方文档指南下载适合操作系统的版本,并将其路径添加到环境变量中以便全局调用。 #### 创建 .proto 文件 创建一个新的 `.proto` 文件来定义消息格式。下面是一个简单的例子: ```protobuf syntax = "proto3"; option go_package = "./;examplepb"; message Person { string name = 1; int32 id = 2; string email = 3; } ``` 此段代码定义了一个名为 `Person` 的消息类型,其中包含了三个字段:名字 (`name`)、ID (`id`) 电子邮件地址 (`email`)。每个字段都有唯一的编号,这是用来识别字段的关键部分[^1]。 #### 生成 Go 代码 保存上述 `.proto` 文件后,在终端执行命令以生成对应的 Go 源码: ```bash protoc --go_out=. person.proto ``` 这会基于给定的消息定义自动生产必要的序列化/反序列化逻辑。生成后的文件可以直接被引入至项目当中[^4]。 #### 初始化 Go 工程并编写测试案例 确保已经初始化好 Go module 并设置了正确的依赖项之后,就可以开始写入业务逻辑了。这里给出一段简单示例展示怎样编码解码 `Person` 对象: ```go package main import ( "log" example "path/to/generated/code/examplepb" // 替换成实际位置 ) func main() { person := &example.Person{ Name: "Alice", Id: 1, Email: "alice@example.com", } data, err := proto.Marshal(person) if err != nil { log.Fatal("marshaling error:", err) } newPerson := &example.Person{} err = proto.Unmarshal(data, newPerson) if err != nil { log.Fatal("unmarshaling error:", err) } log.Printf("Unmarshal result %+v", *newPerson) } ``` 这段代码展示了如何实例化一个 `Person` 类型的对象,接着利用 `Marshal()` 函数对其进行序列化处理;随后再通过 `Unmarshal()` 方法恢复原始对象状态[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值