gRPC (Google Remote Procedure Call) 是一种高性能、跨语言的远程过程调用框架,它通过 Protocol Buffers(ProtoBuf)定义服务接口,并支持众多编程语言。gRPC 在分布式系统的开发中广泛应用,其高效的序列化和反序列化机制、基于 HTTP/2 的流控制和分块传输等一系列特性使其在网络传输方面有着明显的优势。
本文主要介绍在 Golang 中如何安装 gRPC,并编写一个简单的客户端和服务端示例代码。
1. 安装 gRPC
在安装 gRPC 之前,需要先安装 Protocol Buffers 3。Protocol Buffers 是 gRPC 自动生成代码所需的工具,同时也是一个序列化数据的工具。
首先,下载 Protocol Buffers 3 的安装包,以 Mac OS 为例:
$ curl -OL https://github.com/google/protobuf/releases/download/v3.9.1/protobuf-all-3.9.1.zip $ unzip protobuf-all-3.9.1.zip $ cd protobuf-3.9.1
执行 configure、make、make install 即可安装 Protocol Buffers:
$ ./configure $ make $ sudo make install
安装完 Protocol Buffers 后,使用以下命令安装 Go 的 gRPC 和相关工具:
$ go get -u google.golang.org/grpc $ go get -u github.com/golang/protobuf/protoc-gen-go
2. 编写 ProtoBuf 文件
ProtoBuf 文件用于定义服务接口和数据结构,并通过 gRPC 工具自动生成相应的代码(包括客户端和服务端代码)。
我们在此编写一个简单的示例,定义一个计算器服务接口,支持加法运算:
syntax = "proto3"; package calculator; service Calculator { rpc Add(AddRequest) returns (AddResponse) {} } message AddRequest { int32 left = 1; int32 right = 2; } message AddResponse { int32 sum = 1; }
在此示例中,定义一个名为 Calculator 的服务接口,包含一个 Add 方法,该方法接收一个 AddRequest 参数并返回一个 AddResponse 参数。
AddRequest 和 AddResponse 都是消息结构,分别包含两个 int32 类型的字段,表示加法的两个操作数和结果。
3. 生成代码
在编写 ProtoBuf 文件后,使用以下命令生成客户端和服务端代码:
$ protoc --go_out=plugins=grpc:. calculator.proto
此命令生成一个名为 calculator.pb.go 的 Go 文件,其中定义了计算器服务的客户端和服务端代码。
4. 编写客户端和服务端代码
在生成客户端和服务端代码后,就可以开始编写实际的客户端和服务端了。
首先是服务端代码,我们创建一个名为 server.go 的文件,实现 Calculator 接口:
package main import ( "context" "log" "net" pb "calculator/calculator" "google.golang.org/grpc" ) type server struct{} func (s *server) Add(ctx context.Context, in *pb.AddRequest) (*pb.AddResponse, error) { sum := in.Left + in.Right return &pb.AddResponse{Sum: sum}, nil } const ( port = ":50051" ) func main() { lis, err := net.Listen("tcp", port) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() pb.RegisterCalculatorServer(s, &server{}) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
在此示例中,我们定义了一个名为 server 的结构体,实现了 Calculator 接口中的 Add 方法。Add 方法接收一个 AddRequest 参数,并计算两个操作数之和,返回一个 AddResponse 参数。
最后,通过 gRPC 框架提供的 RegisterCalculatorServer 方法将服务注册到 gRPC 服务器中,并启动 gRPC 服务器。
接下来编写客户端代码,我们创建一个名为 client.go 的文件,实现一个简单的通过计算器服务进行加法运算的例子:
package main import ( "context" "log" "os" "strconv" pb "calculator/calculator" "google.golang.org/grpc" ) const ( address = "localhost:50051" defaultName = "world" ) func main() { // Set up a connection to the server. conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() c := pb.NewCalculatorClient(conn) // Contact the server and print out its response. left, err := strconv.Atoi(os.Args[1]) if err != nil { log.Fatalf("could not parse left operand: %v", err) } right, err := strconv.Atoi(os.Args[2]) if err != nil { log.Fatalf("could not parse right operand: %v", err) } r, err := c.Add(context.Background(), &pb.AddRequest{Left: int32(left), Right: int32(right)}) if err != nil { log.Fatalf("could not add: %v", err) } log.Printf("Sum: %d", r.Sum) }
在此示例中,我们创建了一个名为 client 的客户端对象,并通过 grpc.Dial 方法连接到服务器。然后,我们从命令行参数中解析出加法的两个操作数,并调用 Add 方法发送请求,得到服务器返回的结果并输出。
5. 运行示例
在两个文件都编写完毕后,使用以下命令编译并运行两个程序:
$ go build server.go $ go build client.go $ ./server
然后在另一个终端中执行以下命令运行客户端程序:
$ ./client 1 2
运行结果会输出计算结果 3。
以上就是 gRPC 在 Golang 中的安装和使用,通过 gRPC 编写高效的分布式系统将变得十分简单。
以上是grpc golang安装的详细内容。更多信息请关注PHP中文网其他相关文章!

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文讨论了GO的反思软件包,用于运行时操作代码,对序列化,通用编程等有益。它警告性能成本,例如较慢的执行和更高的内存使用,建议明智的使用和最佳

本文讨论了GO中使用表驱动的测试,该方法使用测试用例表来测试具有多个输入和结果的功能。它突出了诸如提高的可读性,降低重复,可伸缩性,一致性和A

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化

本文讨论了通过go.mod,涵盖规范,更新和冲突解决方案管理GO模块依赖关系。它强调了最佳实践,例如语义版本控制和定期更新。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器