背景
php程序员转golang,学习完go基础知识,跟做练习的时候,顺便把过程记录下来,方便日后查找使用
前置条件
protobuf已安装完成,运行protoc --version正常返回版本信息

执行 go install github.com/golang/protobuf/protoc-gen-go
Protobuf定义
Google Protocol Buffer( 简称 Protobuf)是Google公司内部的混合语言数据标准,他们主要用于RPC系统和持续数据存储系统。
grpc调用protobuf
本次使用grpc+protobuf实现微服务
开发环境
windows+vscode
实现过程
一、代码实现
生成protobuf文件
1、在D:\go_demos\grpc_demo目录下,创建server和client目录
2、在命令行运行 D:\go_demos\grpc_demo\server>code .
3、打开vscode
4、创建proto文件夹
5、创建greeter.proto文件
6、输入代码
syntax="proto3";
option go_package="./greeter";
service Greeter{
rpc SayHello(HelloReq)returns(HelloRes);
}
message HelloReq{
string name =1;
}
message HelloRes{
string message=1;
}
7、进入proto目录
8、在终端运行protoc --go_out=plugins=grpc:./ *.proto
生成文件

server端
1、创建main.go,输入代码
package main
import (
"context"
"fmt"
"greeter/proto/greeter"
"net"
"google.golang.org/grpc"
)
// 1、定义远程调用的结构体和方法,需要实现GreeterServer接口
type Hello struct {
}
func (h Hello) SayHello(c context.Context, req *greeter.HelloReq) (*greeter.HelloRes, error) {
fmt.Println(req)
return &greeter.HelloRes{
Message: "你好:" + req.Name,
}, nil
}
func main() {
fmt.Println("grpc")
//初始化grpc对象
grpcServer := grpc.NewServer()
//注册服务
greeter.RegisterGreeterServer(grpcServer, new(Hello))
//监听端口
linter, err1 := net.Listen("tcp", "127.0.0.1:8080")
if err1 != nil {
fmt.Println(err1)
}
//启动服务
grpcServer.Serve(linter)
}
2、启动备用
client端
1、进入D:\go_demos\grpc_demo\client目录
2、把server目录中的prorto目录拷贝到client目录下
3、在命令行运行D:\go_demos\grpc_demo\client>code . 打开vscode
4、创建main.go,输入代码
package main
import (
"client/proto/greeter"
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
func main() {
fmt.Println("client")
//建立连接
conn, err1 := grpc.NewClient("127.0.0.1:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err1 != nil {
fmt.Println(err1)
}
//注册客户端
client := greeter.NewGreeterClient(conn)
res, err2 := client.SayHello(context.Background(), &greeter.HelloReq{
Name: "小黑",
})
if err2 != nil {
fmt.Println(err2)
}
fmt.Println(res)
}
5、在终端运行go mod init client和go mod tidy加载依赖
6、运行main.go


搞定,下一个
948

被折叠的 条评论
为什么被折叠?



