go中的protobuf和grpc使用教程

 更新时间:2024年08月13日 10:47:38   作者:卡卡舅舅  
gRPC 是 Google 公司基于 Protobuf 开发的跨语言的开源 RPC 框架,这篇文章主要介绍了go中的protobuf和grpc使用教程,需要的朋友可以参考下

一、Protobuf

       Protobuf是接口规范的描述语言,可以通过工具生成代码,将结构化数据序列化。

二、grpc

        gRPC 是 Google 公司基于 Protobuf 开发的跨语言的开源 RPC 框架。

三、使用教程

3.1 student.proto

syntax = "proto3";
import "google/api/annotations.proto";
package main;
option go_package = "/main;student";
message Student {
  string name = 1;
  int32 age = 2;
  repeated int32 scores = 3;
}
service StudentService {
  rpc GetStudent(Student) returns (Student){
    option (google.api.http) = {
      post: "/v1/student/get"
      body: "*"
    };
  };
}

3.2 根据proto文件生成接口和结构定义

   third_party 存放annotations.proto

 protoc --proto_path=./third_party --proto_path=.  --go_out=.  --go-grpc_out=.   student.proto 

 编译生成目标文件

3.3 grpc provider 实现

// 定义提供者
type StudentService struct {
	student.UnimplementedStudentServiceServer `wire:"-"`
}
// 实现提供者方法
func (s *StudentService) GetStudent(context.Context, *student.Student) (*student.Student, error) {
	return &student.Student{
		Age:    18,
		Name:   "vicyor",
		Scores: []int32{1, 2, 3, 4, 5},
	}, nil
}

3.4 grpc server 实现

func main_grpc() {
	serverPort := 50051
	// 创造grpc服务端
	server := grpc.NewServer()
	// 创建listener
	lis, _ := net.Listen("tcp", fmt.Sprintf(":%d", serverPort))
	// 注册grpc服务
	student.RegisterStudentServiceServer(server, &StudentService{})
	// grpc 启动
	server.Serve(lis)
}

3.5 grpc client 实现

func main_grpc() {
    <-time.NewTimer(time.Second * 2).C
	// 这里启动一个消费者
	conn, _ := grpc.NewClient("127.0.0.1:50051", 
    grpc.WithTransportCredentials(insecure.NewCredentials()))
	defer conn.Close()
	cli := student.NewStudentServiceClient(conn)
    // 3秒读超时
	ctx, _ := context.WithTimeout(context.Background(), time.Second*3)
	res, _ := cli.GetStudent(ctx, &student.Student{})
	fmt.Println(res)
}

到此这篇关于go中的protobuf和grpc的文章就介绍到这了,更多相关go protobuf和grpc内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Hugo Config模块构建实现源码剖析

    Hugo Config模块构建实现源码剖析

    这篇文章主要为大家介绍了Hugo Config模块构建实现源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Go 互斥锁和读写互斥锁的实现

    Go 互斥锁和读写互斥锁的实现

    本文主要介绍了Go 互斥锁和读写互斥锁的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • go语言操作es的实现示例

    go语言操作es的实现示例

    本文主要介绍了go语言操作es的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 学会提升Go语言编码效率技巧拒绝加班!

    学会提升Go语言编码效率技巧拒绝加班!

    这篇文章主要为大家介绍了Go语言编码效率提升技巧详解,学会了从此拒绝加班,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go语言的GOPATH与工作目录详解

    Go语言的GOPATH与工作目录详解

    这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置、应用目录结构、编译应用等内容,需要的朋友可以参考下
    2014-10-10
  • GO语言(golang)基础知识

    GO语言(golang)基础知识

    这篇文章主要介绍了GO语言(golang)基础知识,需要的朋友可以参考下
    2015-01-01
  • 一文详解Golang的函数特性

    一文详解Golang的函数特性

    函数是 Golang 中非常重要的组成部分之一,它们提供了代码的可重用性和组织性。在本文中,我们将深入了解 Golang 函数的多个方面,希望对大家有所帮助
    2023-04-04
  • go语言中切片与内存复制 memcpy 的实现操作

    go语言中切片与内存复制 memcpy 的实现操作

    这篇文章主要介绍了go语言中切片与内存复制 memcpy 的实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • go语言程序cpu过高问题排查的方法详解

    go语言程序cpu过高问题排查的方法详解

    使用golang进行复杂的组合运算,导致CPU占用率非常高,下面这篇文章主要给大家介绍了关于go语言程序cpu过高问题排查的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Go的ORM框架的使用

    Go的ORM框架的使用

    GORM是一个功能丰富的Go语言ORM框架,提供全功能的数据库操作支持,本文就来介绍一下GORM框架的使用,感兴趣的可以了解一下
    2026-01-01

最新评论