windows 下 goprotobuf 的安裝與使用

安裝 protoc

 

安裝protobuf的編譯器protoc-參考

window:

  • 下載: protoc-3.3.0-win32.zip
  • 解壓,把bin目錄下的protoc.exe複製到GOPATH/bin下,GOPATH/bin加入環境變量。
  • 當然也可放在其他目錄,需加入環境變量,能讓系統找到protoc.exe
    linux:
  • 下載:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip
  • 解壓,把bin目錄下的protoc複製到GOPATH/bin下,GOPATH/bin加入環境變量。
  • 如果喜歡編譯安裝的,也可下載源碼自行安裝,最後將可執行文件加入環境變量。

 

安裝 protoc-gen-go

  • 在終端直接執行 go get -u github.com/golang/protobuf/protoc-gen-go,可以在你的%GOPATH%/bin路徑下找到一個 protoc-gen-go.exe
  • 如: $GOPATH=C:\Users\answer\go\

 

 

common.ptoto

syntax = "proto3";

message Response {
    // 狀態編碼
    int32 code = 1;
    // 狀態編碼具體錯誤描述
    string message = 2;
    // 返回數據
    bytes result = 3;
}
# 進入對應的目錄執行以下命令生成 common.ptoto.pb.go 文件
protoc.exe  --go_out=./  common.ptoto

# 或使用以下命令
protoc --plugin=protoc-gen-go=C:\Users\answer\go\bin\protoc-gen-go.exe --go_out=./ common.proto

 

錯誤分析

# 執行 protoc.exe  --go_out=./  common.ptoto 報錯, 錯誤描述
--go_out: protoc-gen-go: Plugin failed with status code 1.

# 解決方案
go get -u github.com/golang/protobuf/protoc-gen-go

 

undefined: proto.ProtoPackageIsVersion3

undefined: proto.ProtoPackageIsVersion3

# 通過 go get -u google.golang.org/grpc 安裝的 protoc-gen-go版本永遠是最新的(支持v3)
# 而使用grpc教程 demo 用的包是 protoc-gen-go v1.2.0 版本 (不支持v3 )

GIT_TAG="v1.2.0" # change as needed
go get -d -u github.com/golang/protobuf/protoc-gen-go
# 切換到 1.2.0 分支
git -C "$(go env GOPATH)"/src/github.com/golang/protobuf checkout $GIT_TAG
go install github.com/golang/protobuf/protoc-gen-go

 

undefined: proto.InternalMessageInfo

undefined: proto.InternalMessageInfo

# 原因: 新的版本加入了InternalMessageInfo導致編譯不過

# 解決方案1、
# 1. 使用舊版本的插件,即手動下載並安裝protoc-gen-go版本v1.1.0 (https://github.com/golang/protobuf/releases/tag/v1.2.0)來生成舊風格的原型代碼。
# 下載文件
https://github.com/golang/protobuf/archive/v1.2.0.zip
# 解壓, tar包方式: tar zxvf protobuf-1.2.0.tar.gz

# 進入到源碼的 protoc-gen-go 目錄
cd protobuf-1.2.0/protoc-gen-go
# 重新編譯
go build

# 將生成的protoc-gen-go放入$GOROOT/bin目錄下,重新編譯protobuf文件

protoc xxx.proto --go_out=.

# 重新編譯項目,問題解決



# C:\Users\answer\go\src\github.com\golang\protobuf   $GOPATH\src\github.com\golang\protobuf
# 解決方案2
# 1. 使用正確的依賴版本:您的項目依賴項中應該有github.com/golang/protobuf 目錄,

# 2. 將其替換爲最新版本(v1.2.0),下載地址:https://github.com/golang/protobuf/releases,

# 3. 即將下載的目錄替換項目中的github.com/golang/protobuf目錄,問題解決。



# 刪除生成的 ***.ptoto.pb.go 文件中的 XXX*** 字段和方法

 

Reference

發佈了159 篇原創文章 · 獲贊 28 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章