go语言使用grpc入门笔记(1)----实现简单的服务端和客户端

13 篇文章 1 订阅

已默认安装go语言的环境及配置

一.相关资源获取

1.安装grpc和相关插件

//安装grpc
go get -u google.golang.org/grpc
//安装
go get google.golang.org/protobuf/cmd/protoc-gen-go
//安装,用于生成grpc代码
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
//安装grpc-gateway插件
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway

2.检查环境

(1)在终端执行protoc -version,出现下图则说明配置成功

(2) $GOPATH/bin 目录下有 protoc-gen-go、protoc-gen-go-grpc、protoc-gen-grpc-gateway 这三个可执行文件。

二.编写proto文件

syntax = "proto3";  //语法声明

option go_package="./;pb";

package pb; //包名


// Greeter 微服务
service Greeter {
  rpc SayHello(HelloRequest) returns (HelloResponse){
  }
}
message  HelloRequest{
  string name=1;
}
message  HelloResponse{
   string message=1;
}

三.生成Go stubs,会生成*.pb.go*_grpc.pb.go两个文件

//生成model
protoc --go_out ./pb ./pb/hello.proto

//生成service
protoc --go-grpc_out ./pb ./pb/hello.proto

四.服务端代码

package main

import (
	"context"
	"log"
	"net"

	"google.golang.org/grpc"
	"google.golang.org/grpc/reflection"
	pb "seeker.com/grpcdemo/pb"
)
const (
	port = ":50051"
)
type server struct{
	pb.UnimplementedGreeterServer
}
func (s *server) SayHello(ctx context.Context , in *pb.HelloRequest)(*pb.HelloResponse , error){
	return &pb.HelloResponse{Message: "Hello:" +in.Name},nil;
}
func main(){
	lis , err := net.Listen("tcp" , port)
	if err != nil{
         log.Fatalf("failed to listen :%v" , err)
	}
	s :=grpc.NewServer();
    pb.RegisterGreeterServer(s , &server{})

    reflection.Register(s)
    if err := s.Serve(lis) ; err != nil{
	     log.Fatalf("failed to Serve :%v" , err)
	}
}

五.客户端代码

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"os"
	"seeker.com/grpcdemo/pb"
	"time"
)

const (
	address = "localhost:50051"
	defaultName = "hapi"
)

func main()  {
	conn , err :=grpc.Dial(address ,  grpc.WithInsecure())
	if err !=nil{
		fmt.Println("did not connect")
	}
	defer conn.Close()
	c :=pb.NewGreeterClient(conn)

	name :=defaultName

	if len(os.Args) > 1 {
		name = os.Args[1]
	}
	ctx , cancel :=context.WithTimeout(context.Background() , time.Second)
	defer cancel()
	r ,err :=c.SayHello(ctx , &pb.HelloRequest{Name : name})
	if err !=nil {
		fmt.Println("34")
	}
	fmt.Println(r.Message)

}

六.运行效果

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值