———>grpc官网<———
go grpc 快速开始
使用工具Goland
//声明版本
syntax = "proto3";
// 生成的go文件的包名
option go_package="./;gorpc;";
// proto 的包名
package hello_grpc;
// 请求信息结构体
message Req {
//字段
string message = 1;
}
// 响应信息结构体
message Res {
//字段
string message = 1;
}
// 创建一个服务
service HelloGRPC {
rpc SayHi(Req) returns(Res);
}
@echo off
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./hello_grpc.proto
go mod tidy
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
protoc工具下载
protoc-21.1-win64.zip
,工具一直在更新,可能你们看到的版本和我的不一样,不过都可以用。对应自己的电脑版本去下载相应的文件。打开终端进入到 hello_gprc.proto
文件所在的文件夹,执行 build.bat
.这个时候会生成hello_gprc.pb.go
和hello_gprc_grpc.pb.go
两个go文件
package main
import (
servers "grpc"
gorpc "grpc/pb"
"google.golang.org/grpc"
"log"
"net"
)
func main() {
listen, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(err)
}
server := grpc.NewServer()
gorpc.RegisterHelloGRPCServer(server, &servers.Server{})
err = server.Serve(listen)
if err != nil {
log.Fatal(err)
}
}
package server
import (
gorpc "grpc/pb"
"context"
"fmt"
)
type Server struct {
gorpc.UnimplementedHelloGRPCServer
}
func (receiver *Server) SayHi(ctx context.Context, req *gorpc.Req) (res *gorpc.Res, err error) {
fmt.Println(req.GetMessage())
return &gorpc.Res{Message: "my name is server"}, nil
}
package main
import (
gorpc "grpc/pb"
"context"
"google.golang.org/grpc"
"log"
)
func main() {
conn, err := grpc.Dial("localhost:8080", grpc.WithInsecure())
defer conn.Close()
if err != nil {
log.Fatal(err)
}
client := gorpc.NewHelloGRPCClient(conn)
req, err := client.SayHi(context.Background(), &gorpc.Req{Message: "my name is client"})
if err != nil {
log.Fatal(err)
}
println(req.GetMessage())
}