gRPC-Go 项目教程
grpc-go基于HTTP/2的gRPC的Go语言实现。项目地址:https://gitcode.com/gh_mirrors/gr/grpc-go
项目介绍
gRPC-Go 是 gRPC 的 Go 语言实现,基于 HTTP/2 的高性能开源通用 RPC 框架。它特别适用于移动设备和 HTTP/2 优先的场景。gRPC 允许客户端应用程序直接调用服务器应用程序上的方法,就像本地对象一样,使得分布式应用程序和服务的创建更加简单。
项目快速启动
安装 gRPC-Go
首先,确保你已经安装了 Go 语言的最新版本。然后,通过以下命令安装 gRPC-Go:
go get google.golang.org/grpc
创建一个简单的 gRPC 服务
-
定义 Protocol Buffers 文件
创建一个名为
helloworld.proto
的文件,内容如下:syntax = "proto3"; package helloworld; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
-
生成 Go 代码
使用 Protocol Buffers 编译器生成 Go 代码:
protoc --go_out=. --go-grpc_out=. helloworld.proto
-
编写服务器代码
创建一个名为
server.go
的文件,内容如下:package main import ( "context" "log" "net" pb "path/to/your/helloworld" "google.golang.org/grpc" ) type server struct { pb.UnimplementedGreeterServer } func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello " + in.Name}, 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.go
的文件,内容如下:package main import ( "context" "log" "os" "time" pb "path/to/your/helloworld" "google.golang.org/grpc" ) const ( address = "localhost:50051" defaultName = "world" ) func main() { conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock()) 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] } ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("could not greet: %v", err) } log.Printf("Greeting: %s", r.Message) }
-
运行服务器和客户端
首先运行服务器:
go run server.go
然后运行客户端:
go run client.go
应用案例和最佳实践
应用案例
gRPC-Go 广泛应用于微服务架构中,
grpc-go基于HTTP/2的gRPC的Go语言实现。项目地址:https://gitcode.com/gh_mirrors/gr/grpc-go