GRPC的golang快速入门

本文介绍了gRPC的golang入门步骤,包括安装gRPC工具、编写protobuf文件、创建server端和client端。通过示例展示了如何定义服务方法、监听端口、注册服务并进行客户端调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GRPC的golang快速入门

GRPC的安装

grpc的官网grpc.io

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1

执行完上面两条命令后,gopath的bin目录下会出现两个执行文件protoc-gen-go.exe和protoc-gen-go-grpc.exe

还需要安装proto.exe,安装地址https://github.com/protocolbuffers/protobuf/releases下载相应系统的压缩包即可

将下载解压好的proto.exe也放在gopath的bin目录下

最后下载golang的grpc第三方库

go get -u google.golang.org/grpc

protobuf文件的编写

简单例子

//定义proto版本
syntax = "proto3";
//定义包名
package pb;
//定义生成的go文件的包名"路径;别名"
option go_package = "./pb";

//类似于go的结构体
message Req {
    string message = 1;
}

message Res {
    string message = 1;
}

//定义服务器
service SayHi{
	//定义rpc服务
    rpc Hello (Req) returns (Res);
}

编译命令

protoc --go_out=. --go_opt=paths=source_relative   --go-grpc_out=. --go-grpc_opt=paths=source_relative    ./hello.proto

即可生成相应的golang文件

server端

  • 定义服务方法

  • 监听端口

  • 注册grpc服务

  • 注册服务方法

  • 开启服务

package main

import (
	"context"
	"log"
	"net"
	"new/grpc/pb"

	"google.golang.org/grpc"
)
//定义一个服务结构体
type Server struct {
	pb.UnimplementedSayHiServer
}

//定义服务方法
func (s *Server) Hello(c context.Context, in *pb.Req) (*pb.Res, error) {
	log.Println(in.Message)
	return &pb.Res{Message: "服务器发送的信息"}, nil
}

func main() {
    //监听端口
	listen, err := net.Listen("tcp", ":9999")
	if err != nil {
		log.Println(err)
		return
	}
    //注册grpc服务
	s := grpc.NewServer()
    //注册服务方法
	pb.RegisterSayHiServer(s, &Server{})
    //开启grpc服务
	s.Serve(listen)
}

client端

  • 建立连接
  • 定义相应方法的客户端
  • 调用对应方法
package main

import (
	"context"
	"log"
	"new/grpc/pb"

	"google.golang.org/grpc"
)

func main() {
    //建立连接
	conn, err := grpc.Dial("127.0.0.1:9999", grpc.WithInsecure())
	if err != nil {
		log.Println(err)
		return
	}
	defer conn.Close()
    //定义相应方法的客户端
	c := pb.NewSayHiClient(conn)
    //调用相应方法
	res, err := c.Hello(context.Background(), &pb.Req{Message: "客户端发送的信息"})
	if err != nil {
		log.Println(err)
		return
	}
	log.Println(res)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值