5個步驟搞定protoc環境安裝

[TOC]git

胖sir:不知道你有沒有這樣的疑惑,工做中發現不少新接觸GO的小夥伴安裝protoc的環境須要折騰好久github

剛開始我裝環境的時候也是花了好長時間,最後如何裝好的也不知緣由,網上查找了各類資源,也沒有一篇文章能夠很好的解決這個問題.golang

兵長:這個好說,今天我們就來梳理和總結一下,如何快速高效的安裝好protoc的環境數據庫

前提,先介紹一下protoc是幹啥的?編程

簡而言之,protoc是用於將proto文件編程成各類語言源碼文件的工具windows

例如此處咱們能夠將proto文件經過protoc工具,編譯生成適用於GO語言開發的源碼文件xxx.pb.go,通常會和GRPC進行配套使用,若是對這個感興趣,能夠在後臺留言哦,此處暫且先單一說明一下protoc的環境如何一次性搞定app

目前看來windows上的protoc安裝相對來講疑問仍是比較多的,其實安裝仍是很是簡單的,咱們就來講說吧模塊化

windows 下安裝go protoc

一、下載最新版的golang安裝程序

https://github.com/protocolbuffers/protobuf/releases/

二、 解壓,把GOPATH的路徑添加到環境變量

例如:要是不知道GOPATH在哪裏獲取, 能夠在終端裏面敲入 go env 進行查看工具

三、命令行執行

go get github.com/golang/protobuf

若如上命令執行失敗,請配置代理ui

go env -w GO111MODULE=on  //打開模塊
go env -w GOPROXY=https://goproxy.cn,direct //啓用代理

四、%GOPATH%/src/github.com/golang/protobufxxxxx/protoc-gen-go

go build

go install

執行以後,看到本身GOPATH/bin 目錄下會生成以下程序,說明環境配置成功

五、開始使用protoc

目錄結構爲:

test.proto

syntax="proto3"; //版本號
package mypro;  //包名
enum ClassName{   //枚舉
    class1=0;  //標號 必須從 0開始
    class2=1;
    class3=2;
}
message Student{ //消息,對應於Go的結構體
  string name=1; //1:標號,惟一 便可(至關於數據庫中的Id,不必定要從1 ,2的順序依次排列。)
  int32 age=2;  //必須指定整型的範圍,如int32,int64
  string address=3;
  ClassName cn=4;
}
message Students{
   repeated Student person=1;  // repeated 修飾,至關於Go中切片
   string school=2;
}

執行:protoc --go_out=. *.proto , 會生成 .pb.go文件

main.go

package main
import (
    "fmt"
    "github.com/golang/protobuf/proto"
    "mypro.com/mypro"  //引入的proto的包 , go語言中,一個目錄裏面的全部文件都應設置成一個包
)
func main() {
    s1 := &mypro.Student{} //第一個學生信息
    s1.Name = "jz01"
    s1.Age = 23
    s1.Address = "cq"
    s1.Cn = mypro.ClassName_class2 //枚舉類型賦值
    
    ss := &mypro.Students{}
    ss.Person = append(ss.Person, s1) //將第一個學生信息添加到Students對應的切片中
    
    s2 := &mypro.Student{}            //第二個學生信息
    s2.Name = "jz02"
    s2.Age = 25
    s2.Address = "cd"
    s2.Cn = mypro.ClassName_class3
    ss.Person = append(ss.Person, s2) //將第二個學生信息添加到Students對應的切片中
    ss.School = "cqu"
    
    fmt.Println("Students信息爲:", ss)
    
    // Marshal takes a protocol buffer message
    // and encodes it into the wire format, returning the data.
    buffer, _ := proto.Marshal(ss)
    fmt.Println("序列化以後的信息爲:", buffer)
    //  Use UnmarshalMerge to preserve and append to existing data.
    data := &mypro.Students{}
    proto.Unmarshal(buffer, data)
    fmt.Println("反序列化以後的信息爲:", data)
}

在main.go的同級目錄 執行 go mod init xxx , 模塊化 如:go mod init mypro.com

在main.go 同級目錄 執行 go build , 若執行成功,則正確解析protobuf

當須要使用到grpc + protobuf的時候,protoc工具編譯proto文件時,須要加上grpc插件,具體的使用方式,感興趣的能夠後臺私信小魔童哪吒哦

以上爲本期所有內容,若有疑問能夠在評論區或後臺提出你的疑問,咱們一塊兒交流,一塊兒成長。

好傢伙要是文章對你還有點做用的話,請幫忙點個關注,分享到你的朋友圈,分享技術,分享快樂

技術是開放的,咱們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。

做者:小魔童哪吒

相關文章
相關標籤/搜索