Golang-grpc 加 gateway(一)(protoc ,gateway,swagger)2019-10 過程報錯補充

安裝 protoc 編譯器

(protoc編輯器教藻,就是把我們的 .proto 文件編譯成不同語言的代碼)
第一步 去下面 github
https://github.com/protocolbuffers/protobuf

點擊 release 赎婚,查看發(fā)行的版本
現(xiàn)在(2019-03-12)最新的是 v3.7.0

2019-10
補充:可能是因為我升級go版本導(dǎo)致 GOROOT下(/usr/local/go)bin目錄中必要的安裝文件都沒有了
重裝一下
最新的protoc是 3.10.0了 (protoc-3.10.0-osx-x86_64)
安裝方式一:(推薦第二種方式,簡單更快)
  1. 下載 protobuf-all-3.7.0.zip 瞭吃,解壓
    cd protobuf-3.7.0
  2. 然后執(zhí)行下面兩條命令安裝即刻
    ./configure
    make install
  3. 完成后檢測下是否安裝成功:
    protoc --help
    protoc --version
安裝方式二:

直接在剛才的GitHub的release頁面下載編譯好的包

  1. mac下載 protoc-3.7.0-osx-x86_64.zip
  2. 解壓
  3. 將 protoc-3.7.0-osx-x86_64 文件夾中的 bin 目錄下的 protoc 文件, 拷貝到 GOPATH下的bin目錄,(也可以拷貝到GOROOT下的bin目錄里面)
  4. 將 protoc-3.7.0-osx-x86_64 文件夾中的 include 目錄下的 google文件夾, 拷貝到 /usr/local/include 目錄
    (其他系統(tǒng)具體操作可以看下 解壓文件下的 readme.txt 文件里面有說明)

根據(jù)proto文件定義偎蘸,生成對應(yīng)語言代碼(演示的golang)

  1. 創(chuàng)建一個 hello.proto 文件
    先用官方文檔中最簡單的一段測試代碼
syntax = "proto3";

package test;
// The greeting service definition.
service Greeter {
    // Sends a greeting
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
    string name = 1;
}

// The response message containing the greetings
message HelloReply {
    string message = 1;
}
  1. 在該目錄下 執(zhí)行下面命令:
protoc --go_out=. hello.proto
或者
protoc --go_out=plugins=grpc:. hello.proto
或者
protoc --go_out=. *.proto
或者
protoc --go_out=plugins=grpc:. *.proto

會生成文件 hello.pb.go


2019-10
補充:這次執(zhí)行上面的命令會報錯了

protoc-gen-go: program not found or is not executable 。瞬内。迷雪。

protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--go_out: protoc-gen-go: Plugin failed with status code 1.
make: *** [proto] Error 1

看來還要安裝 protoc-gen-go
之前是在下面步驟“安裝 grpc-gateway”才安裝 protoc-gen-go
安裝:

go get -d -u github.com/golang/protobuf/protoc-gen-go
go install github.com/golang/protobuf/protoc-gen-go

結(jié)果安裝又報錯了:報錯信息
go install github.com/golang/protobuf/protoc-gen-go: open /usr/local/go/bin/protoc-gen-go: permission denied
看來沒有權(quán)限往/usr/local/go/bin/目錄下安裝寫入
解決:
執(zhí)行命令:
sudo chmod -R 777 /usr/local/go
不要執(zhí)行:

chmod -R 777 /usr/local/go
發(fā)現(xiàn)可能會報很多錯: 所以加上sudo吧
chmod: Unable to change file mode on /usr/local/go/*** Operation not permitted

再次執(zhí)行上面第二步的 go install
go install github.com/golang/protobuf/protoc-gen-go
沒有任何提示表示安裝成功了哈
再次試試上面的 protoc 的編譯命令成功。

安裝 grpc-gateway

github地址:
https://github.com/grpc-ecosystem/grpc-gateway

依次執(zhí)下面go get

go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
go get -u github.com/golang/protobuf/protoc-gen-go

補充 2019-10:
執(zhí)行第一步時又報錯了
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway

# 
cd /Users/dh/Documents/GOPATH/src/gopkg.in/yaml.v2; git pull --ff-only
From https://gopkg.in/yaml.v2
   51d6538..f221b84  master     -> origin/master
   51d6538..970885f  v2         -> origin/v2
 * [new branch]      v3         -> origin/v3
 * [new tag]         v2.2.4     -> v2.2.4
 * [new tag]         v2.2.3     -> v2.2.3
error: Your local changes to the following files would be overwritten by merge:
    decode.go
    decode_test.go
    resolve.go
    scannerc.go
Please commit your changes or stash them before you merge.
Aborting
package gopkg.in/yaml.v2: exit status 1

進(jìn)到y(tǒng)aml.v2目錄發(fā)現(xiàn)git有修改記錄呢
checkout . 后再試也不行
解決:
刪除 yaml.v2 目錄就可以了


上面執(zhí)行成功后會在 $GOBIN (/usr/local/go/bin)目錄下面 生成3個二進(jìn)制文件

protoc-gen-grpc-gateway
protoc-gen-grpc-swagger
protoc-gen-go

安裝完成了遂鹊,接下來
修改一下剛才的 hello.proto 文件

syntax = "proto3";

package hello;

import "google/api/annotations.proto";

message HelloRequest {
    string name = 1;
    int32 age = 2;
}
message HelloReply {
    string message = 1;
}
service HelloService {
    rpc SayHello (HelloRequest) returns (HelloReply){
        option (google.api.http) = {
            post:"/v1/examples/sayhello"
            body:"*"
        };
    }
}

生成代碼的命令需要變了
上面的proto文件用到了 import google/api 的一些文件
新的生成命令:

  1. 生成 pb.go
protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --go_out=plugins=grpc:. *.proto

生成 hello.pb.go

  1. 生成 gateway
protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --grpc-gateway_out=logtostderr=true:. *.proto 

生成 hello.pb.gw.go

  1. 生成 swagger
protoc -I/usr/local/include -I. \
  -I$GOPATH/src \
  -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
  --swagger_out=logtostderr=true:. *.proto

生成 hello.swagger.json

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末振乏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秉扑,更是在濱河造成了極大的恐慌慧邮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舟陆,死亡現(xiàn)場離奇詭異误澳,居然都是意外死亡,警方通過查閱死者的電腦和手機秦躯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門忆谓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人踱承,你說我怎么就攤上這事倡缠∩诿猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵昙沦,是天一觀的道長琢唾。 經(jīng)常有香客問我,道長盾饮,這世上最難降的妖魔是什么采桃? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮丘损,結(jié)果婚禮上普办,老公的妹妹穿的比我還像新娘。我一直安慰自己徘钥,他們只是感情好衔蹲,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吏饿,像睡著了一般踪危。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猪落,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天贞远,我揣著相機與錄音,去河邊找鬼笨忌。 笑死蓝仲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的官疲。 我是一名探鬼主播袱结,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼途凫!你這毒婦竟也來了垢夹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后靡羡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡而晒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阅畴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倡怎。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出监署,到底是詐尸還是另有隱情颤专,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布钠乏,位于F島的核電站血公,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缓熟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一摔笤、第九天 我趴在偏房一處隱蔽的房頂上張望够滑。 院中可真熱鬧,春花似錦吕世、人聲如沸彰触。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽况毅。三九已至,卻和暖如春尔艇,著一層夾襖步出監(jiān)牢的瞬間尔许,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工终娃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留味廊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓棠耕,卻偏偏與公主長得像余佛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窍荧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 再次重新按這個教程操作時發(fā)現(xiàn)中間遇到一些報錯辉巡,所以重新寫了一個細(xì)節(jié)補充的Golang-grpc 加 gateway...
    正為瘋狂閱讀 5,908評論 0 10
  • gRPC 是一個高性能、通用的開源RPC框架蕊退,基于HTTP/2協(xié)議標(biāo)準(zhǔn)和Protobuf序列化協(xié)議開發(fā)郊楣,支持眾多的...
    小波同學(xué)閱讀 19,492評論 6 19
  • 相關(guān)知識可以參考Cocos Creator Protobuf的js版本使用protoc2 與 protoc3 區(qū)別...
    合肥黑閱讀 10,781評論 0 1
  • 原文出處:gRPC gRPC分享 概述 gRPC 一開始由 google 開發(fā),是一款語言中立咕痛、平臺中立痢甘、開源的遠(yuǎn)...
    小波同學(xué)閱讀 7,219評論 0 18
  • 1.簡介 在gRPC中,客戶端應(yīng)用程序可以直接調(diào)用不同計算機上的服務(wù)器應(yīng)用程序上的方法茉贡,就像它是本地對象一樣塞栅,使您...
    第八共同體閱讀 1,878評論 0 6