grpc官网——go:https://www.grpc.io/docs/languages/go/quickstart/
安装go get -u -v google.goland.org/grpc
添加rpc服务
在.proto文件中
service 服务名 {
rpc 函数名(参数:消息体) returns(返回值:消息);
}
message People {
string name = 1;
}
message Student {
int32 age = 2;
}
例:
service hello {
rpc Helloworld(People) returns(Student);
}
protobuf编译期间默认不编译服务;要想编译服务需要使用grpc,编译指令为
protoc *.proto --go_out=plugins=grpc:./
clien和server通信demo
.proto文件
syntax = "proto3";
package pb;
option go_package ="./";
message Teacher {
int32 age = 1;
string name = 2;
}
service SayName {
rpc SayHello(Teacher) returns (Teacher);
}
生成.pb.go文件
protoc *.proto --go_out=plugins=:./
服务端grpc
package main
import (
"IHome/day01/pb"
"context"
"fmt"
"google.golang.org/grpc"
"net"
)
//2.1 定义类
type Children struct {
}
//2.2 按接口绑定类方法
func (this *Children) SayHello(ctx context.Context, t *pb.Teacher) (*pb.Teacher, error) {
t.Name += " is sleeping"
return t, nil
}
func main() {
//1 初始化grpc对象
grpcServer := grpc.NewServer()
//2 注册服务
pb.RegisterSayNameServer(grpcServer, new(Children))
//3 设置监听,指定ip、port
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("net.listen : ", err)
return
}
defer listener.Close()
//4 启动服务
grpcServer.Serve(listener)
}
客户端grpc
package main
import (
"IHome/day01/pb"
"context"
"fmt"
"google.golang.org/grpc"
)
func main() {
//1 连接grpc服务
grpcConn, err := grpc.Dial("127.0.0.1:8080", grpc.WithInsecure())
if err != nil {
fmt.Println("grpc.Dial : ", err)
return
}
defer grpcConn.Close()
//2 初始化grpc客户端
grpcClient := pb.NewSayNameClient(grpcConn)
//创建并初始化Teacher对象
var teacher pb.Teacher
teacher.Name = "jmm"
teacher.Age = 23
//3 调用远程服务
t, err := grpcClient.SayHello(context.TODO(), &teacher)
if err != nil {
fmt.Println("grpc.Dial : ", err)
return
}
fmt.Println(t)
}
遇到的问题
grpc "google.golang.org/grpc"报红
go get google.golang.org/grpc
3、protobuf
官网
protobuf官网——go:https://developers.google.cn/protocol-buffers/docs/proto3
安装protobuf 官网下载protobuf https://github.com/protocolbuffers/protobuf/releases/下载后解压,命令行进入到文件夹下输入
./configure --prefix=/usr/local/protobuf
接着输入
make
make check
sudo make install
验证安装是否成功
which protoc
protoc --version
goland中安装使用protobuf
编写的注意事项
message成员编号,可以不从1开始,但不能重复可以使用message嵌套定义数组、切片使用 repeated 关键字可以使用枚举 enum可以使用联合体 oneof
编译protobuf
protoc *.proto --go_out=./
遇到的问题
protoc-gen-go: unable to determine Go import path for需要在 .proto 中指定绝对路径
protoc-gen-go-grpc: program not found or is not executable
go get -u google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go
go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)