首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在golang中不使用protoc生成.pb文件

在golang中,可以使用第三方库来实现不使用protoc生成.pb文件的功能。一个常用的库是github.com/golang/protobuf/proto。该库提供了一种纯粹的golang实现的protobuf编解码器,可以直接操作protobuf消息,而无需生成.pb文件。

使用该库,可以按照以下步骤进行操作:

  1. 定义protobuf消息结构:首先,需要定义protobuf消息的结构,即.proto文件中的message部分。例如,定义一个简单的消息结构如下:
代码语言:txt
复制
syntax = "proto3";

message Person {
  string name = 1;
  int32 age = 2;
}
  1. 在golang中使用protobuf消息:在golang代码中,可以使用github.com/golang/protobuf/proto库来操作protobuf消息。首先,需要导入该库:
代码语言:txt
复制
import "github.com/golang/protobuf/proto"

然后,可以使用proto.Marshal和proto.Unmarshal函数来进行消息的序列化和反序列化。例如,将一个Person消息序列化为字节流:

代码语言:txt
复制
person := &Person{
  Name: "Alice",
  Age:  25,
}

data, err := proto.Marshal(person)
if err != nil {
  // 处理错误
}

反之,将字节流反序列化为Person消息:

代码语言:txt
复制
newPerson := &Person{}
err := proto.Unmarshal(data, newPerson)
if err != nil {
  // 处理错误
}
  1. 其他操作:除了序列化和反序列化,github.com/golang/protobuf/proto库还提供了其他一些操作,例如生成默认值、比较消息等。可以根据具体需求进行使用。

总结起来,使用github.com/golang/protobuf/proto库可以在golang中实现不使用protoc生成.pb文件的功能。通过定义protobuf消息结构,并使用proto.Marshal和proto.Unmarshal函数进行序列化和反序列化,可以方便地操作protobuf消息。更多关于该库的详细信息和使用示例,可以参考官方文档:github.com/golang/protobuf/proto

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Golang 语言 gRPC 怎么使用

最后,我们介绍一下 protoc 编译生成 pb 文件需要使用的插件 protoc-gen-go 和 protoc-gen-go-grpc。...)/bin" 完成以上两步之后,我们就可以使用 protoc 编译 .proto 文件生成 pb 文件了。...03 编写 .proto 文件生成 pb 文件 Golang 语言中使用 gRPC,首先编写 .proto 文件,然后使用 protoc 编译 .proto 文件生成 pb 文件,最后编写剩余的...首先使用接口设计语言 protobuf 的编译器 protocprotoc-gen-go 和 protoc-gen-go-grpc 插件生成 pb 文件,我们通过查看生成pb 文件,可以看到 protoc...main 函数,我们使用 grpc 调用 NewServer 函数创建一个服务,然后使用 pb 文件的 RegisterGreeterServer 函数注册服务,对应自动生成pb 文件 helloworld_grpc.pb.go

1.5K20

Go Protobuf(比xml小3-10倍, 快20-100倍)

你可以定义数据的结构,然后使用特殊生成的源代码轻松的各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而破坏根据旧数据结构编译而成并且已部署的程序。 1 ....Golang使用protobuf需提前安装 protoc-gen-to工具,用于将.proto文件转换为Golang代码。...文件定义需要处理的结构化数据,通过protoc工具可将.proto文件转换为C、C++、Golang、Java、Python等多种语言的代码,因此兼容性好且易于使用; protoc --go_out=.... *.proto 命令之后理论上会将当前目录下的所有的.proto文件生成.pb.go文件,但实际测试发现报错,推荐使用; Protoc-gen-gogo gogoprotobuf有两个插件可用分别是...按照protobuf语法, .proto文件定义数据结构, 同时使用protoc工具生成Golang代码; 2 .

1.9K50

go grpc 初步笔记

/grpc 因为被墙,所以有可能需要其他方式 由于墙的原因,我们一些依赖的包文件可以通过下面方式下载到: github 可以找到源码,下载后复制到对应目录即可的: google.golang.org.../grpc 对应的代码地址: https://github.com/grpc/grpc-go google.golang.org/cloud/compute/metadata 对应的代码地址...go get -a github.com/golang/protobuf/protoc-gen-go 安装protoc 下载使用protoc工具 google/protobuf windows 下载...protoc-3.2.0-win32.zip 类似这样的包 其他系统下载自己系统的包 使用注意事项 到我写博客的时候,grpc使用protobuffer生成文件的context 依然使用的是"golang.org...pb文件夹,然后在这个文件输入命令: protoc --go_out=. *.proto 将会生成 hello.pb.go文件,这个时候我们的服务端和客户端就可以使用这个文件了。

59710

gRPC学习之五:gRPC-Gateway实战

. 1 golang golang 6908535 12月 19 08:59 protoc-gen-swagger 现在环境准备好了,开始开发; 编写proto文件 $GOPATH/src目录下,新建文件夹...; 增加的第二处,是SayHello方法的声明处,增加了option配置,作用是配置SayHello方法对外暴露的RESTful接口的信息; 使用protoc-gen-grpc-gateway的时候,...上述两处配置会被识别到并生成对应的代码; 根据proto文件生成gRPC、gRPC-Gateway源码 proto文件编写完成,接下来是生成gRPC、gRPC-Gateway的源码; 生成gRPC源码的命令咱们前面的文章已经用过...并启动 接下来编写服务端代码server.go,这个和《初试GO版gRPC开发》的server.go内容一样; $GOPATH/src/helloworld目录下新建文件夹server,在此文件夹下新建...// 这样远程调用时就执行了业务代码了 type server struct { // pb.go自动生成的,是个空结构体 pb.UnimplementedGreeterServer } //

1.5K21

Golang笔记 6.3 RPC 编程之 gRPC

另一方面,网络本质上是异步的,并且许多情况下能够启动RPC而阻塞当前线程很有用。 gRPC编程都有同步和异步两种形式。...RPC 生命周期 4 golang 怎么用 参考 https://grpc.io/docs/quickstart/go/ 4.1 安装 安装 gRPC $ go get -u google.golang.org..." + in.Name}, nil } 4.3 示例修改 - 增加一个新的方法 pb 增加新的方法 service Greeter { // Sends a greeting rpc SayHello....proto 文件定义服务 使用 protocol buffer 编译器产生 服务端和客户端 代码 使用 Go gRPC API 为你的服务编写客户端和服务端 本篇笔记演示了如何使用 gRPC 框架,...包括 proto 文件定义服务,使用 pb 编译器产生代码,最后使用 gRPC API 编写 client 和 server 代码。

1.5K30

Go 语言中使用 Protocol Buffers

解压到文件后,修改环境变量。 解压后的文件里有 bin/protoc ,这个 protoc 命令用于编译和生成代码,后面会用到。 建议将这个文件位置放入到环境变量,以方便使用。...命令行执行: go get -u github.com/golang/protobuf/protoc-gen-go 这个工具用于生成 基于 Protocol Buffers 的代码。...3.开始使用 3.1 概述 使用步骤拆解: (1) 定义.proto文件,它用来描述,定义传输过程的数据包。 (2) 编译.proto文件生成代码。...用来将描述文件编译成指定平台的代码(比如生成GO源代码文件)。 (3) 获取特定平台的类库/包,用来特定平台编码,解码等。 下面分别描述这几个步骤。...使用 protoc 生成 Go 源代码文件

1.3K50

Golang语言社区】 Go语言中使用 Protobuf

Golang文件,通过此源文件可以使用定义 .proto 文件的消息。...这时候我们会生成一个名为 test.pb.go 的源文件。...使用之前,我们先了解一下每个 Protobuf 消息 Golang 中有哪一些可用的接口: 每一个 Protobuf 消息对应一个 Golang 结构体 消息域名字为 camel_case 在对应的...Golang 结构体为 CamelCase 消息对应的 Golang 结构体不存在 setter 方法,只需要直接对结构体赋值即可,赋值时可能使用到一些辅助函数,例如: 复制代码 msg.Foo...,指针为 nil 时表示域未设置 消息 repeated 的域被实现为 slice 访问枚举值时,使用“枚举类型名_枚举名”的格式(更多内容可以直接阅读生成的源码) 使用 proto.Marshal

1.3K30

Grpc介绍 — ProToBuf基本使用

---- 二,安装protobuf 安装protobuf为了生成对应语言的文件必须需要protoc的命名,protoc是c语言的protobuf的命名,有两种访问一个是自己编译: wget https:.../configure > make > make install > protoc --version libprotoc 3.6.1 或者根据更具系统直接使用编译好的bin文件运行protoc(这里使用的是...这种,所以有的不能使用go get的方式安装,可以使用以下安装方式: > git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org...go install google.golang.org/grpc 先使用笔者的准备好的: > cd $GOPATH/src > mkdir -p grpc-php-to-golang-demo/protobuf...1; } // The response message containing the greetings message HelloReply { string message = 1; } 生成对应的文件

1.5K20

Grpc-Gateway - Grpc兼容HTTP协议文档自动生成网关

主要是根据 google.api.http定义思想完成的,一下就是grpc-gateway结构图:  二,grpc-gateway环境准备 grpc-gateway使用完全的Go语言进行开发,所以安装起来也非常简单...go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger go get -u github.com/golang/protobuf...grpc结构文件和gateway文件protoc --proto_path=../ -I/usr/local/include -I...."}' {"value":"Hello world"} 四,使用gateway生成swagger文档 cd gateway protoc -I/usr/local/include -I. \ -I...4倍差距,但是考虑到本身Gogrpc和http上本身就有3.5倍的差距,本身在同等HTTP的情况下经过grpc-gateway和不经过直接到API差距大概20~30%左右,这样的性能消耗带来的是兼容

4.1K30

Go - 关于 protoc 工具的小疑惑

protoc 工具可以 通过相关插件 将 .proto 文件 编译 成 C、C++、Golang、Java、Python、PHP 等多种语言的代码。...本文主要讨论通过 protoc 生成 Golang 代码,例如我们常见的命令: protoc -I . --go_out=xxx 想了解更多参数,执行 protoc --help 查看。...我能想到两个方案解决: 通过两个环境去完成,例如,打两个 docker 环境,新项目一个环境中生成,旧项目另一个环境中生成。...当使用参数 --go_out=plugins=grpc:xxx 生成时,生成文件 *.pb.go 包含消息序列化代码和 gRPC 代码。...当使用参数 --go_out=xxx --go-grpc_out=xxx 生成时,会生成两个文件 *.pb.go 和 *._grpc.pb.go ,它们分别是消息序列化代码和 gRPC 代码。

94530

go简单使用grpc

@v1.2 进入proto目录下使用以下命令对proto文件进行编译,会生成两个文件user.pb.go和user_grpc.pb.go两个文件 protoc --go_out=....--go-grpc_out=. user.proto --go_out=. protobuf相关代码文件生成该目录下 --go-grpc_out=. grpc相关代码文件生成该目录下 编译后: user.pb.go...创建grpc服务端 我们首先要实现user_grpc.pb.go的UserServer接口,该接口中的方法是我们proto文件定义的rpc服务AddUser和GetUser。...不过,你会发现其中还多了个mustEmbedUnimplementedUserServer方法,但是我们proto文件并没有定义,这个是用来兼容使用的。...创建grpc客户端 调用user_grpc.pb.go文件的NewUserClient方法来创建调用rpc服务的客户端,调用rpc方法时使用user.pb.go的结构体作为输入与输出。

36920
领券