> 各服務端之間的通訊經常會用到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 快捷鍵