golang学习笔记,grpc+protobuf实现微服务

背景

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
在这里客户端返回插入图片描述
服务端返回
搞定,下一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值