千家信息网

Golang中grpc怎么用

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,小编给大家分享一下Golang中grpc怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. grpc安装pip in
千家信息网最后更新 2025年12月02日Golang中grpc怎么用

小编给大家分享一下Golang中grpc怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1. grpc安装

pip install --upgrade pip

pip install grpcio --user

pip install protobuf --user

pip install grpcio-tools --user

sudo yum -y install protobuf-compiler protobuf-static protobuf protobuf-devel

dnf install protobuf-compiler.x86_64

pip install googleapis-common-protos --user

2. 导入grpc包

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

3. 编写test.proto文件


// 指定版本



syntax = "proto3";

option objc_class_prefix = "HLW";
// 定义包名
package demo;

// 定义服务
service ServerBase{
// 定义接口
// 方法
rpc MakeMD5(Request) returns (Response){}
rpc SayHello(HelloRequest) returns (HelloReplay){}
}

//请求的结构体
message HelloRequest{
// 类型 字段 = 标识号
string name = 1;
}
//返回的结构体
message HelloReplay{
string message = 1;
}

// 定义请求结构体
message Request{
string Data = 1;
}

// 定义返回接口体数据
message Response{
string Msg = 1;
}

4. 生成.go文件

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

这时候目录低下会自动生成test.pb.go文件

5. 简单的书写server.go

package main
import (
"crypto/md5"
"errors"
"fmt"
"github.com/srlemon/note/grpc_"
"golang.org/x/net/context"
"google.golang.org/grpc"
"log"
"net"
)

const (
PORT = ":5003"
)

func main() {
// 开启监听
lis, err := net.Listen("tcp", PORT)
if err != nil {
log.Fatal(err)
}
// new
s := grpc.NewServer()
// 注册服务
demo.RegisterServerBaseServer(s, &Serve{})
log.Println("rpc服务已经开启")
s.Serve(lis)
}

// Serve 服务端
type Serve struct {
}

// MakeMD5 方法
func (s *Serve) MakeMD5(ctx context.Context, req *demo.Request) (ret *demo.Response, err error) {
if req == nil {
err = errors.New("请求数据为空")
return
}
md := md5.New()
data := md.Sum([]byte(req.Data))
ret = new(demo.Response)
ret.Msg = fmt.Sprintf("%x", data)
return
}

// SayHello 方法
func (s *Serve) SayHello(ctc context.Context, req *demo.HelloRequest) (ret *demo.HelloReplay, err error) {
if req == nil {
err = errors.New("请求数据为空")
return
}
ret = new(demo.HelloReplay)
ret.Message = req.Name
return
}

go run server.go 开启rpc服务

6. 写client.go文件

package main
import (
"fmt"
demo "github.com/srlemon/note/grpc_"
"golang.org/x/net/context"
"google.golang.org/grpc"
"log"
)

const (
addr = "127.0.0.1:5003"
)

func main() {
ctx := context.Background()
// 连接代理
conn, err := grpc.Dial(addr, grpc.WithInsecure())
if err != nil {
log.Fatal("did no connect", err)
}
defer conn.Close()
// 生成一个客户端
client := demo.NewServerBaseClient(conn)
var (
data *demo.Request
res *demo.Response
)
data = new(demo.Request)
data.Data = "哈哈,和黑"
// 使用服务端方法
if res, err = client.MakeMD5(ctx, data); err != nil {

log.Fatal("sssssssssss", err)
}
// 输出进行加密后的信息
fmt.Println(string(res.Msg))
// 使用服务端方法
_d, _ := client.SayHello(ctx, &demo.HelloRequest{Name: "哈哈哈"})
// 输出要说的内容
fmt.Println(_d.Message)
}

go run client.go

终端输出:

以上是"Golang中grpc怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0