简单的 Go gRPC 例子

news/2025/3/27 12:51:42/

以下是一个简单的 Go gRPC 例子,其中包括服务端和客户端:
首先,我们需要安装 grpcprotobuf 的 Go 插件:

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go

然后,我们需要定义一个 .proto 文件来定义我们的服务和消息。这里是一个示例 .proto 文件:

protobuf
syntax = "proto3";package example;service Greeter {rpc SayHello (HelloRequest) returns (HelloResponse);
}message HelloRequest {string name = 1;
}message HelloResponse {string message = 1;
}

接下来,我们使用 protoc 工具来生成 Go 代码:

protoc --go_out=plugins=grpc:. *.proto

这将在当前目录下生成 example.pb.go 文件,其中包含我们定义的服务和消息的 Go 代码。
接下来,我们可以编写服务端代码:

package mainimport ("context""google.golang.org/grpc""log""net"pb "path/to/your/proto/package"
)type server struct{}func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloResponse, error) {return &pb.HelloResponse{Message: "Hello, " + req.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.Println("Starting server on port 50051...")if err := s.Serve(lis); err != nil {log.Fatalf("failed to serve: %v", err)}
}

在这个例子中,我们定义了一个名为 server 的结构体,并实现了 SayHello 方法来响应客户端的请求。我们还在 main 函数中创建了一个 grpc.Server 实例,并将我们的服务注册到该实例上。最后,我们使用 Serve 方法来启动服务端并监听端口 50051
现在,我们可以编写客户端代码:

package main
import ("context""log""google.golang.org/grpc"pb "path/to/your/proto/package"
)func main() {conn, err := grpc.Dial(":50051", grpc.WithInsecure())if err != nil {log.Fatalf("failed to connect: %v", err)}defer conn.Close()c := pb.NewGreeterClient(conn)resp, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: "World"})if err != nil {log.Fatalf("failed to call SayHello: %v", err)}log.Printf("Response: %s", resp.Message)
}

在这个例子中,我们首先使用 grpc.Dial 方法来连接到服务端,然后创建一个 GreeterClient 实例来调用服务端的 SayHello 方法。最后,我们输出响应的消息。
现在,我们可以运行服务端和客户端来测试我们的 gRPC 服务了。


http://www.ppmy.cn/news/581741.html

相关文章

什么是 CSR,SSR,SSG 渲染

在Web开发中,网页渲染是一个重要的过程,它关系到网页的渲染速度和SEO排名,下面列举三种常见的网页渲染方式。 一、什么是浏览器端渲染 (CSR) CSR(Client-Side Rendering)是指将网页的内容生成和渲染都放在客户端&…

web常见的屏幕尺寸

设计图是1920X1080的. 要在常见屏上显示正常(比例正确可) 1280X720 1366X768 1440X900 1920X1080 1280X720 106.67; 1366X768 113.84; 1440X900 120;1920X1080160

satellite: 利用TLE动态计算并实时显示多颗卫星的位置及轨迹

本示例的目的是介绍演示如何在vue+satellite项目中利用两行根数动态地计算,并显示多个卫星的位置及轨迹。每秒钟更新一下卫星的位置和角度,加载当前时间到固定时间(如720分钟后)的一段轨迹。 直接复制下面的 vue+openlayers源示例代码,操作2分钟即可运行实现效果 文章目…

屏幕尺寸大全

手机设备名称 操作系统尺寸 inPPI纵横比宽 x 高 dp宽 x 高 px密度 dpiiPhone XiOS5.845819 : 9375 x 8121125 x 24363.0 xxhdpiiPhone 8 (8, 7, 6S, 6)iOS5.540116 : 9414 x 7361242 x 22083.0 xxhdpiiPhone 8 (8, 7, 6S, 6)iOS4.732616 : 9375 x 667750 x 13342.0 xhdpiiPhone…

使用bboss往es中插入数据

场景 为了简化项目的部署&#xff0c;需要改变原来数据插入方式&#xff1a; 原来的方式&#xff1a;数据发送到kafka&#xff0c;再进入logstatsh&#xff0c;最后到es中 现在的方式&#xff1a;数据直接插入到es中 引入bboss依赖 <!-- BBOSS --><dependency>…

ChatGPT新功能曝光:可记住用户信息、上传文件和工作区

&#x1f989; AI新闻 &#x1f680; ChatGPT新功能曝光&#xff1a;可记住用户信息、上传文件和工作区 摘要&#xff1a;一张神秘截图曝光了ChatGPT新功能&#xff0c;包括可记住用户信息的"My profile"、上传和管理文件的"My files"以及可以让AI使用不…

GO语言仿事件系统

生命不息&#xff0c;学习不止 事件系统原理事件注册实现事件调用实现 处理方实现事件触发 你以为结束了 话说这是一个风和日丽的上午&#xff0c;拿到了外卖小哥送来的我最心爱的麻辣烫&#xff0c;我打开了因为昨天刚充了三毛钱电费而恢复了使用的电脑&#xff0c;登上了满是…

PTN/IPRAN技术介绍及发展史

目录 一、IP RAN&#xff08;IP Radio Access Network&#xff09; 二、PTN与IPRAN技术的比较 三、IP RAN发展史&#xff1a; 四、为什麽使用PTN 一、IP RAN&#xff08;IP Radio Access Network&#xff09; IPRAN 简单的说是指IP化的移动回传 是运营商的接入技术&#x…