golang使用最新grpc說明

1.環(huán)境說明

1.系統(tǒng):ubuntu 版本20.04

2.軟件:golang 版本1.15.6

2.所需文件

1.golang安裝包 https://golang.org/dl/go1.15.6.linux-amd64.tar.gz

2.grpc包 https://github.com/grpc/grpc-go/archive/v1.34.0.tar.gz

3.protoc 文件 https://github.com/protocolbuffers/protobuf/releases/download/v3.14.0/protoc-3.14.0-linux-x86_64.zip

4.protobuf 文件 https://github.com/golang/protobuf/archive/v1.4.3.tar.gz

3.環(huán)境部署

1.golang環(huán)境安裝

tar zxvf go1.15.6.linux-amd64.tar.gz-C/usr/local

2.設(shè)置環(huán)境變量

編輯編輯 /etc/profile 文件

nano /etc/profile

在文件末尾添加下列內(nèi)容

exportGOROOT=/usr/local/go

exportGOBIN=$GOROOT/bin

exportPATH=$PATH:$GOBIN:$GOROOT

3.環(huán)境變量生效命令

source/etc/profile

4.驗(yàn)證安裝是否成功命令

go version

輸出goang版本 即為成功

5.開啟 go mod

go env-wGO111MODULE=on

go env-wGOPROXY=https://goproxy.cn,https://goproxy.io,direct

6.下載依賴

gogetgoogle.golang.org/protobuf/cmd/protoc-gen-go \

? ? ? ? google.golang.org/grpc/cmd/protoc-gen-go-grpc

或者直接將grpc包和protobuf包解壓到$GOPATH/google.golang.org

7.把protoc添加到環(huán)境變量中

exportPATH="$PATH:$(go env GOPATH)/bin"

或者直接解壓protoc-3.14.0-linux-x86_64.zip ,將bin目錄的protoc復(fù)制到$GOBIN目錄

8.運(yùn)行helloword example

cd $GOPATH/google.golang.org/grpc/example/helloworld

$ gorun greeter_server/main.go

重新打開一個(gè)新端口,運(yùn)行

$ gorun greeter_client/main.go

Greeting: Hello world

9.修改proto內(nèi)容,重新編譯

protoc--go_out=.--go_opt=paths=source_relative \

--go-grpc_out=.--go-grpc_opt=paths=source_relative \

?? helloworld/helloworld.proto

10. go_package 說明

.proto文件應(yīng)包含一個(gè)選項(xiàng),用于指定包含所生成代碼的Go軟件包的完整導(dǎo)入路徑。

option go_package="example.com/foo/bar";

輸出文件所在的輸出目錄的子目錄取決于go_package選項(xiàng)和編譯器標(biāo)志:

默認(rèn)情況下,輸出文件放置在以Go軟件包的導(dǎo)入路徑命名的目錄中。例如,protos/foo.proto 具有上述go_package選項(xiàng)的文件將生成名為的文件 example.com/foo/bar/foo.pb.go。

如果給--go_opt=module=$PREFIX標(biāo)記protoc,則從輸出文件名中刪除指定的目錄前綴。例如,protos/foo.proto具有上述go_package選項(xiàng)和標(biāo)志--go_opt=module=example.com/foo的文件將生成名為的文件 bar/foo.pb.go。

如果給--go_opt=paths=source_relative標(biāo)記 protoc,則將輸出文件放置在與輸入文件相同的相對(duì)目錄中。例如,該文件protos/foo.proto 生成名為的文件protos/foo.pb.go。

當(dāng)您像這樣運(yùn)行原型編譯器時(shí)

protoc--proto_path=src--go_out=build / gen--go_opt=paths=source_relative src / foo.proto src / bar / baz.proto

源.proto文件應(yīng)包含一個(gè)go_package選項(xiàng),用于為包含該文件的包指定完整的Go導(dǎo)入路徑。如果沒有 go_package選擇,編譯器將嘗試猜測(cè)一個(gè)。編譯器的未來版本將使該go_package選項(xiàng)成為必需。

生成代碼的Go軟件包名稱將是該go_package選項(xiàng)的最后一個(gè)路徑部分 。例如:

// Go程序包名稱為“ timestamppb”。

選項(xiàng)go_package=“ google.golang.org/protobuf/types/known/timestamppb”;

導(dǎo)入路徑用于確定一個(gè).proto文件導(dǎo)入另一.proto文件時(shí)必須生成哪些導(dǎo)入語句 。例如,如果是 a.protoimport b.proto,則生成的a.pb.go文件需要導(dǎo)入包含生成的b.pb.go文件的Go軟件包(除非兩個(gè)文件都在同一個(gè)軟件包中)。

導(dǎo)入路徑還用于構(gòu)造輸出文件名。有關(guān)詳細(xì)信息,請(qǐng)參見上面的“編譯器調(diào)用”部分。

該go_package選項(xiàng)還可以包括一個(gè)顯式的程序包名稱,該名稱與導(dǎo)入路徑之間用分號(hào)分隔。例如:“ example.com/foo;package_name”。不鼓勵(lì)使用此方法,因?yàn)橥ǔJ拱Q與導(dǎo)入路徑相對(duì)應(yīng)(默認(rèn)值)更加清晰。作為該go_package選項(xiàng) 的替代方法,.proto可以在命令行中使用 --go_opt=M=$FILENAME=$IMPORT_PATH flag to protoc.

具體protoc語法詳情見鏈接 https://developers.google.com/protocol-buffers/docs/reference/go-generated#package

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容