新闻中心

Golang如何使用gRPC Unary模式调用服务_Golang gRPC Unary调用开发实践

2025-11-28
浏览次数:
返回列表
首先定义Protobuf接口并生成Go代码,然后实现gRPC服务端和客户端,最后启动服务并调用SayHello方法,输出“Response: Hello, Alice”,完成Unary调用流程。

golang如何使用grpc unary模式调用服务_golang grpc unary调用开发实践

在Go语言中使用gRPC进行服务间通信,Unary模式是最基础、最常用的调用方式。它对应“一元调用”,即客户端发送一个请求,服务器返回一个响应。本文将带你从零开始实践Golang中gRPC Unary调用的完整开发流程。

定义Protobuf接口

要使用gRPC,首先需要定义服务接口和消息结构。创建service.proto文件:

syntax = "proto3";
package example;

// 定义请求消息
message HelloRequest {
    string name = 1;
}

// 定义响应消息
message HelloResponse {
    string message = 1;
}

// 定义服务
service Greeter {
    rpc SayHello(HelloRequest) returns (HelloResponse);
}

使用protoc工具生成Go代码:

protoc --go_out=. --go_opt=paths=source_relative \
    --go-grpc_out=. --go-grpc_opt=paths=source_relative \
    service.proto

实现gRPC服务端

编写服务端逻辑,注册并启动gRPC服务器:

package main

import (
    "context"
    "log"
    "net"

    "google.golang.org/grpc"
    pb "your-module-path/proto"
)

type server struct {
    pb.UnimplementedGreeterServer
}

func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloResponse, error) {
    return &pb.HelloResponse{
        Message: "Hello, " + req.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.Println("gRPC server listening on :50051")
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

编写gRPC客户端

客户端通过连接服务端,调用Unary方法SayHello:

package main

import (
    "context"
    "log"

    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
    pb "your-module-path/proto"
)

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"}

    // 发起Unary调用
    resp, err := client.SayHello(context.Background(), req)
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }

    log.Printf("Response: %s", resp.GetMessage())
}

运行与验证

启动服务端:

go run server.go

N世界 N世界

一分钟搭建会展元宇宙

N世界 138 查看详情 N世界

另开终端运行客户端:

go run client.go

预期输出:

Response: Hello, Alice

说明gRPC Unary调用成功完成。

基本上就这些。只要定义好Proto、生成代码、实现服务和调用,就能快速搭建gRPC通信。注意错误处理和连接管理,在生产环境中建议启用TLS并设置超时。

以上就是Golang如何使用gRPC Unary模式调用服务_Golang gRPC Unary调用开发实践的详细内容,更多请关注其它相关文章!


# 正则表达式  # seo品牌推广如何做  # 顶尖的seo外包广告  # 官方网站优化活动  # seo 友链交换过程  # 沈阳浑南网站优化  # 磐安县网站建设加盟  # 家电清洗36节营销推广  # 皇姑区网站建设资费  # 洛阳营销推广外包  # 江津区网站获客推广  # 要使  # 带你  # 解决问题  # go  # 中文网  # 相关文章  # 就能  # 如何使用  # 客户端  # 服务端  # red  # google  # ai  # 工具  # go语言  # golang 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 抖音怎么赚钱_抖音创作者变现方法与途径指南  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  J*aScript中正确使用querySelectorAll与复杂CSS选择器  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  AO3同人作品网入口 AO3搜索引擎官网永久地址  React Router 嵌套组件中 URL 重定向问题的解决方案  照顾宝贝2小游戏点击立即在线玩  c++20的std::jthread是什么_c++可中断线程与RAII式管理  《刺客信条:影》PS5 Pro和Switch 2画面对比  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  C++ map遍历方法大全_C++ map迭代器使用总结  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  J*a里如何使用forEach遍历Map_Map遍历方法说明  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  excel如何生成目录 excel一键生成工作表目录超链接  极兔快递快件信息查询系统 极兔快递官网运单号追踪  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  J*aScript生成器_j*ascript异步迭代  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  jQuery Mask 插件中实现电话号码固定前导零的教程  漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  Archive of Our Own官网直达 AO3最新可用地址一览  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台  composer的"require-dev"部分是用来做什么的?  J*aScript中针对特定容器内图片动画的实现教程  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!  Log4j Console Appender性能瓶颈与高并发优化策略  使用Pandas转换并合并DataFrame:多列映射至统一结构  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  yy漫画网页版官方入口_yy漫画官网登录页面链接  Python多版本共存与虚拟环境管理深度指南  如何使 Jest 模拟函数默认抛出错误以提高测试效率  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  火锅吃太多会怎样 火锅吃太多会上火吗  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  整合Supabase认证与Django模型:跨模式迁移的解决方案  TikTok网页版直接登录 TikTok网页端官方平台入口  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】  Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧  FullCalendar 自定义按钮样式定制指南  曝R星经典之作开发图 设计简陋但信息密集!  知音漫客官网漫画下载_知音漫客网页版阅读记录  C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件  163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航 

搜索