# http_protobuf **Repository Path**: historyofsmile/http_protobuf ## Basic Information - **Project Name**: http_protobuf - **Description**: No description available - **Primary Language**: Go - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-09 - **Last Updated**: 2021-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 用protocol buffer替换json的http请求 ## 安装protoc以及语言插件 * 安装protoc,安装方式:不同系统,自行安装 * 安装golang差将 * ```shell go get github.com/golang/protobuf/protoc-gen-go ``` * 由于protocol buffer 并不是官方支持go语言,所以不通的语言插件需要自己安装 * 需要把gopath目录配置到环境变量的PATH中,不同系统,自行配置 ## 编写proto文件 * 示例如下: * ```proto syntax = "proto3"; //指定版本,必须要写(proto3、proto2) package proto; // 指定生成的包名 option go_package = "/proto"; // 必不可少 //message是固定的。Req是类名,可以随意指定,符合规范即可 message Req{ string text = 1; int32 index = 2; } message Resp { string text = 1; int32 index = 2; } ``` * ![image-20210908235901377](https://gitee.com/historyofsmile/picture/raw/main/picgo/20210908235907.png) ## 生成go文件 * 命令:` protoc --go_out=. *.proto` * 前边一些列安装就是为了干这件事情——把proto文件转译为各种语言的代码包 * protoc 命令由第一步安装的protoc提供 * `--go_out`由安装的golang插件(protoc-gen-go)提供 ## 替换请求参数和返回值 * 请求参数和返回值都是序列化后的[]byte,直接反序列化就行 * 注意:参数和返回值序列化和反序列化的对象只能是proto生成的包里的对象,自行对号入座 ## TIPS * protobuf 的性能优势有目共睹,麻烦性自行操作后再骂,反正我已经骂过了 * 如果web接口数据用proto传的话,其实就是开发慢一点,但是系统性能提升了呀 * 前后端对接不需要再写文档了,不管哪端编写proto文件,大家共享就好了,各自生成自己的语言对应的包,妥妥的