使用Golang IDE 以及 go mod搭建简单gRPC服务 - Go语言中文社区

使用Golang IDE 以及 go mod搭建简单gRPC服务


使用Golang IDE 以及 go mod搭建简单gRPC服务

使用go mod方式搭建项目

这样创建的项目可以不在GOPATH下运行
输入代理:

https://goproxy.cn

当然,也可以用别的代理
在这里插入图片描述
先创建server.go在项目根目录,放main函数
在go.mod文件中加一行

require google.golang.org/grpc v1.29.1

下载gRPC依赖

官方安装命令:

go get google.golang.org/grpc

是安装不了的,会报超时错误:

package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

因为这个包已经迁移到github上了,正确的做法是使用git clone去下载:
有git的同学 可以直接

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc

git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net

git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text

git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto

下载protoc:
https://github.com/golang/protobuf
下载后将bin文件夹配置到环境变量中。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200516172057581.png
怎么配置环境变量就不说了,不知道的同学肯定是跳着学了。
输入protoc --version 出现版本号说明安装成功。

创建gRPC服务端

创建一个文件夹pbfiles用于存放proto文件
创建一个proto文件:Hi.proto
在这里插入图片描述

syntax="proto3";  //
package services;
option go_package = "../services";
message HiRequest {
  string say = 1;
}
message HiResponse {
  string responed = 1;
}
service HiService {
    rpc GetHiResponed(HiRequest) returns (HiResponse);
}

创建services文件夹在项目根目录,文件夹名就是proto文件中定义的包名。

打开终端,可以在Golang IDE 左下角选择Terminal也可以在项目文件夹中cmd进入。
在这里插入图片描述
先cd pbfiles 进入pbfiles文件夹
输入 protoc --go_out=plugins=grpc:. Hi.proto可以看到在services包中生成了一个Hi.pb.go 文件
在这里插入图片描述
新建一个HiService.go文件,其中声明一个结构体HiService

type HiService struct {
}

结构体实现Hi.pb.go中的接口

type HiServiceServer interface {
	GetHiResponed(context.Context, *HiRequest) (*HiResponse, error)
}

传入一个上下文context 和Hi.pb.go中定义的请求体 ,可以从请求体中取得客户端请求时放入的内容
返回的也是Hi.pb.go中定义的返回体,返回体中的返回值就是客户端请求时返回的内容。
在这里插入图片描述
在server.go的main方法中写上

rpcServer := grpc.NewServer() // 创建grpc服务
services.RegisterHiServiceServer(rpcServer, new(services.HiService)) // 注册,new方法中的是services包中定义的结构体HiService
lis,_:= net.Listen("tcp", ":8081") // 开启一个监听端口
rpcServer.Serve(lis) // 启动服务

在这里插入图片描述
启动服务端。

创建客户端

也使用go mod方式创建项目
将服务端的services包复制过来。
创建一个main.go

package main

import (
	"context"
	"fmt"
	"gRPCClientTest/services"
	"google.golang.org/grpc"
	"log"
)

func main (){

	conn, err := grpc.Dial(":8081",grpc.WithInsecure())
	if err != nil {
		log.Println(err)
	}
	defer conn.Close()
	client := services.NewHiServiceClient(conn)  
	resp, err := client.GetHiResponed(context.Background(),&services.HiRequest{Say: "Hello"})
	if err != nil {
		log.Println(err)
	}
	fmt.Println(resp.Responed)

}

在这里插入图片描述
接下来就可以启动客户端,得到服务端的返回值
在这里插入图片描述
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/aiyaiyayayaya/article/details/106163810
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢