值得一看
广告
彩虹云商城
广告

热门广告位

Golang如何使用gRPC进行远程调用

Go语言通过gRPC实现高效远程调用依赖Protocol Buffers和HTTP/2,流程包括定义.proto接口、生成代码、实现服务端与客户端;2. 编写hello.proto定义服务和消息结构;3. 使用protoc生成hello.pb.go和hello_grpc.pb.go代码;4. 服务端注册Greeter服务并启动监听;5. 客户端连接服务端并调用SayHello方法获取响应。

golang如何使用grpc进行远程调用

Go语言通过gRPC实现高效远程调用,主要依赖Protocol Buffers和HTTP/2。整个流程包括定义接口、生成代码、实现服务端与客户端。下面详细介绍如何在Golang中使用gRPC进行远程调用。

定义服务接口(.proto文件)

gRPC使用Protocol Buffers定义服务方法和消息结构。你需要编写一个.proto文件来描述服务。

例如,创建hello.proto

<font face="Courier New">
syntax = "proto3";
package greet;
option go_package = "./greetpb";
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
service Greeter {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
</font>

这个文件定义了一个Greeter服务,包含一个SayHello方法。

立即学习“go语言免费学习笔记(深入)”;

生成Go代码

使用protoc编译器和Go插件生成服务代码。

安装工具:

AppMall应用商店

AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店
56

查看详情
AppMall应用商店

<font face="Courier New">
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
</font>

生成代码:

<font face="Courier New">
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
hello.proto
</font>

执行后会生成hello.pb.gohello_grpc.pb.go两个文件,包含结构体和服务桩代码。

实现gRPC服务端

编写服务端程序,注册并启动gRPC服务器。

<font face="Courier New">
package main
import (
"log"
"net"
"google.golang.org/grpc"
pb "your-module/greetpb"
)
type server struct {
pb.UnimplementedGreeterServer
}
func (s *server) SayHello(req *pb.HelloRequest, stream pb.Greeter_SayHelloServer) error {
resp := &pb.HelloResponse{
Message: "Hello, " + req.Name,
}
return stream.Send(resp)
}
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("gRPC server listening on :50051")
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
</font>

实现gRPC客户端

客户端连接服务端并发起远程调用。

<font face="Courier New">
package main
import (
"context"
"log"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
pb "your-module/greetpb"
)
func main() {
conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
client := pb.NewGreeterClient(conn)
req := &pb.HelloRequest{Name: "Alice"}
resp, err := client.SayHello(context.Background(), req)
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Response: %s", resp.Message)
}
</font>

基本上就这些。只要定义好proto接口,生成代码,再分别实现服务端处理逻辑和客户端调用,就能完成一次gRPC远程调用。注意确保服务端运行后再启动客户端测试。不复杂但容易忽略细节,比如包路径和protoc参数。

相关标签:

go golang go语言 工具 ai stream google red golang 结构体 接口 Go语言 并发 http

大家都在看:

Go语言:go run是否支持从标准输入执行代码?
Go 项目资源文件管理策略:从外部引用到内部嵌入
利用 Go 反射机制动态生成函数,实现代码精简与优化
Go语言中利用stat系统调用检测文件系统挂载点的原理与实现
解析Go结构体文档注释:深入理解go/ast中的声明与注释关联
温馨提示: 本文最后更新于2025-11-05 22:28:32,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞5赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容