> 各服务端之间的通讯经常会用到protobuf,因为它比json这些更加的快速高效
[TOC]
## 安装编译器
### 安装protoc编译器
> 可在https://github.com/protocolbuffers/protobuf/releases 下载最新安装包
~~~
// 请自行将zip转换成tar.gz
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.2/protoc-3.11.2-linux-x86_64.zip
tar zxvf protoc-3.11.2-linux-x86_64.tar.gz
~~~
> 配置环境变量
~~~
vim ~/.bash_profile
// 将/opt/protoc/bin加入到环境变量中
// 将go 安装的bin插件配置到环境变量中,可通过go env查看GOPATH=/root/go/,如 /root/go/bin
// 如 PATH=$PATH:$HOME/bin:/opt/protoc/bin:/opt/go/bin:/root/go/bin
source ~/.bash_profile
~~~
### go 安装编译器插件
> 此处go的安装步骤过滤,可参考go的安装篇
> 安装执行可以安装go的国内镜像,这样安装插件更加快速稳定
~~~
# 启用 Go Modules 功能
go env -w GO111MODULE=on
# 配置镜像
go env -w GOPROXY=https://goproxy.cn
# 查看是否生效
go env | grep GOPROXY
~~~
> 安装编译器插件
~~~
go get -u github.com/golang/protobuf/protoc-gen-go
~~~
## 创建pb测试文件 (test.proto)
> 头部需指定是proto2还是proto3,有些第三方提供的是没有包含,需要显示指定
> vim /opt/pbtest/test.proto
~~~
//syntax = "proto2";
syntax = "proto3";
package myapi;
// 字段都是用1,2,3这样的方式进行索引标识,等转换成PHP的类的时候,通过getXXFiled()的时候,则是根据这个索引标识进行获取
message Person {
int32 id = 1;
string name = 2;
string email = 3;
double money = 4;
bool is_rich = 5;
}
message player_login {
int32 user_id = 1;
string token = 2;
};
~~~
> 当前目录执行:`protoc --go_out=. *.proto`即可生成对应的go执行文件
## 进行代码测试
~~~
package main
import (
"fmt"
"github.com/golang/protobuf/proto"
"websocket_test/myapi"
)
func main() {
person := &myapi.Person{}
person.Id = 112
person.Name = "www"
person.Email = "www@qq.com"
person.Money = 11
person.IsRich = true
fmt.Println("Students信息为:",person)
// 序列化
buffer, _ := proto.Marshal(person)
fmt.Println("序列化之后的信息为:",buffer)
// 反序列化
data:=&myapi.Person{}
proto.Unmarshal(buffer,data)
fmt.Println("反序列化之后的信息为:",data)
}
~~~
- 基础知识
- 开发环境
- 包名规则
- 包初始化 (init)
- 基础数据类型
- 基础类型转换
- 格式化输出
- go指针
- 流程控制语句
- 函数定义
- 匿名函数
- 数组和切片
- map集合
- 结构体
- Interface接口
- 日期处理
- 数学计算
- 正则表达式
- 协程 (并发处理)
- channel
- waitgroup
- mutex (锁机制)
- websocket
- protobuf
- Redis
- 错误处理
- 打包程序
- NSQ消息队列
- 单元测试
- beego
- 安装入门
- Gin
- 快速入门
- 路由与控制器
- 处理请求参数
- 表单验证
- 处理响应结果
- 渲染HTML模版
- 访问静态文件
- Gin中间件
- Cookie处理
- Session处理
- Gin上传文件
- swagger
- pprof性能测试
- GORM
- 入门教程
- 模型定义
- 数据库连接
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 事务处理
- 关联查询
- 属于 (BELONG TO)
- 一对一 (Has One)
- 一对多 (Has Many)
- 多对多 (Many to Many)
- 预加载 (Preloading)
- 错误处理
- 第三方常用插件
- viper 读取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷键