近年來,隨著雲端運算和大數據的快速發展,越來越多的企業開始使用微服務架構來建立應用程式。而gRPC就是一個高效率且現代化的RPC框架,被廣泛用於微服務之間的通訊。在本文中,我們將介紹如何在golang中安裝gRPC,讓你可以更方便地使用這種通訊框架。
go version
如果返回了類似於"go version go1.14.4 darwin/amd64" 的版本訊息,則表示安裝成功。
go mod init example.com/hello go get google.golang.org/grpc
其中,"example.com/hello"可以替換成任何自己喜歡的名稱,它只是一個範例。
$ touch greeter.proto $ protoc --go_out=. --go-grpc_out=. greeter.proto
寫greeter.proto文件,用來描述gRPC服務的定義:
syntax = "proto3"; package helloworld; // 定义服务接口 service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } // 定义请求和响应结构体 message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
編譯protoc文件,產生對應的greeter.pb.go和greeter. grpc.go兩個服務文件。需要注意的是,在使用protoc編譯時,我們增加了 --go_out 和 --go-grpc_out 兩個參數,用於產生對應的pb和grpc檔。
package main import ( "context" "log" "google.golang.org/grpc" pb "example.com/hello" // 这里是我们定义的服务包名 ) const ( address = "localhost:50051" // 服务端地址 defaultName = "world" ) func main() { // 和服务端建立连接 conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() // 创建客户端 c := pb.NewGreeterClient(conn) // 调用服务方法 name := defaultName if len(os.Args) > 1 { name = os.Args[1] } r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name} if err != nil { log.Fatalf("could not greet: %v", err) } log.Printf("Greeting: %s", r.Message) }
在程式碼註解中,我們已經解釋得比較清楚了,這裡就不再重複。
現在,我們已經完成了服務端和客戶端的程式碼,來執行我們的服務看看吧!
在greetercli.go同一目錄下執行以下命令:
$ go run greetersrv.go
如果沒有任何輸出,表示gRPC服務已經成功地在本地啟動了。接下來,在新終端機視窗中執行客戶端:
$ go run greetercli.go Greeting: Hello world
這裡的輸出結果可以根據自己定義的輸入參數進行調整。
至此,本文的內容基本上已經涵蓋了在golang中安裝gRPC的整個流程,希望能對讀者有所幫助。當然,對於gRPC服務的深入學習,我們也需要掌握更多的細節與規範,不斷地去改善擴充自己的知識體系。
以上是如何在golang中安裝gRPC的詳細內容。更多資訊請關注PHP中文網其他相關文章!