Go gRPC 示例教程
项目介绍
本项目 go-grpc-examples
是由 itsksaurabh
在 GitHub 上开源的,旨在提供一系列 gRPC 在 Go 语言中的示例代码。gRPC 是一个高性能、开源和通用的 RPC 框架,由 Google 开发,支持多种语言。通过这些示例,开发者可以快速学习和掌握 gRPC 在 Go 中的使用方法。
项目快速启动
环境准备
确保你已经安装了以下工具和库:
- Go (版本 >= 1.16)
- Protocol Buffers 编译器 (
protoc
) - Go 的 Protocol Buffers 插件 (
protoc-gen-go
和protoc-gen-go-grpc
)
克隆项目
git clone https://github.com/itsksaurabh/go-grpc-examples.git
cd go-grpc-examples
编译和运行示例
-
进入示例目录:
cd hello-world
-
生成 gRPC 代码:
protoc --go_out=. --go-grpc_out=. hello.proto
-
启动服务器:
go run server/main.go
-
启动客户端:
go run client/main.go
示例代码
hello.proto
syntax = "proto3";
package hello;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
server/main.go
package main
import (
"context"
"log"
"net"
pb "github.com/itsksaurabh/go-grpc-examples/hello-world/hello"
"google.golang.org/grpc"
)
type server struct {
pb.UnimplementedGreeterServer
}
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
log.Printf("Received: %v", in.GetName())
return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
log.Printf("server listening at %v", lis.Addr())
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
client/main.go
package main
import (
"context"
"log"
"time"
pb "github.com/itsksaurabh/go-grpc-examples/hello-world/hello"
"google.golang.org/grpc"
)
func main() {
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithBlock())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewGreeterClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: "World"})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.GetMessage())
}
应用案例和最佳实践
应用案例
- 微服务架构:gRPC 在微服务架构中广泛使用,因为它支持多种语言,并且性能优越。
- 移动应用后端:gRPC 可以用于构建高效的移动