语法速学,返回数组 repeated修饰符


重新编写proto文件
syntax = "proto3";
package services;
import "google/api/annotations.proto";
message ProdRequest {
    int32 prod_id = 1; //传入id
}
message ProdResponse {
    int32 prod_stock = 1; //商品库存
}
message QuerySize {
    int32 size = 1; //页尺寸,这里的1并不是默认值,而是字段的顺序,如果有其他参数就就写2
}
message ProdResponseList {
    repeated ProdResponse prodres = 1; //返回了一堆商品库存,使用了repeated修饰符,还是用了结构体的引用,引用了ProdResponse结构体
}
service ProdService {
    rpc GetProdStock (ProdRequest) returns (ProdResponse) {
        option (google.api.http) = {
            get: "/v1/prod/{prod_id}" //和request中的prod_id对应,不能写错
        };
    }
    rpc GetProdStocks (QuerySize) returns (ProdResponseList);
}protoc --grpc-gateway_out=logtostderr=true:../services Prod.proto重新生成代码
新定义的GetProdStocks返回值是这样的
因为除了Prodres字段其他的字段json都不解析,我只要构造一个Prodres字段就可以了,这里是一个数组

客户端调用代码
package main
import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    "grpccli/helper"
    "grpccli/services"
    "log"
)
func main() {
    //creds, err := credentials.NewClientTLSFromFile("keys/server.crt", "localhost")
    //if err != nil {
    //    log.Fatal(err)+
    //}
    creds := helper.GetClientCreds()
    conn, err := grpc.Dial(":8081", grpc.WithTransportCredentials(creds))
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()
    prodClient := services.NewProdServiceClient(conn)
    /*
    proto文件内容
    message QuerySize {
    int32 size = 1; //页尺寸,这里的1并不是默认值,而是字段的顺序,如果有其他参数就就写2
    }
    message ProdResponseList {
        repeated ProdResponse prodres = 1; //返回了一堆商品库存,使用了repeated修饰符
    }
    service ProdService {
        rpc GetProdStock (ProdRequest) returns (ProdResponse) {
            option (google.api.http) = {
                get: "/v1/prod/{prod_id}" //和request中的prod_id对应,不能写错
            };
        }
        rpc GetProdStocks (QuerySize) returns (ProdResponseList); //定义了参数是QuerySize
    }
    */
    response, err := prodClient.GetProdStocks(context.Background(), &services.QuerySize{Size: 10}) //这里传入的QuerySize是在proto中定义好的参数
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(response.Prodres)
}
语法速学,返回数组 repeated修饰符的更多相关文章
- grpc之protobuf常用语法速学
		1,语法速学(1):返回商品”数组”.repeated修饰符 Repeated:是一个修饰符,返回字段可以重复任意多次(包括0次) 可以认为就是一个数组(切片) 服务端: 创建protobuf文件 s ... 
- ch3-模板语法({{}} v-html v-bind:id 表达式 指令 修饰符 过滤器)
		1 模板语法 Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. 所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器 ... 
- Mongodb更新数组$pull修饰符
		http://blog.csdn.net/yaomingyang/article/details/78701643 一.$pull修饰符会删除掉数组中符合条件的元素,使用的格式是: { $pull: ... 
- Mongodb更新数组$pull修饰符 (mongodb 修改器($inc/$set/$unset/$push/$pop/upsert))
		mongodb 修改器($inc/$set/$unset/$push/$pop/upsert)) https://www.jb51.net/article/112588.htm http://bl ... 
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
		访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ... 
- java的访问控制(包、访问修饰符、修饰符)
		一. java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ... 
- C#学习-图解教程(2):访问修饰符(其中两种)
		学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第四章 类的基本概念 -----> 4.8 访问修饰符 访问修饰符 从类的内部,任何函数成员都可以使用成员的名称访问类中任意的其他成员. ... 
- C#学习笔记06--类/对象/访问修饰符/方法
		编程思想 1.面向过程 面向过程是要把问题解决的过程分成有一定顺序的不同步骤, 然后按照步骤一步步的将问题解决. 2.面向对象 面向对象解决问题的思路是先分析问题中所涉及的对象, 然后 ... 
- JAVA修饰符类型(public,protected,private,friendly)
		转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ... 
随机推荐
- Js学习03--数据类型
			一.数据类型 1.Js中常用的数据类型 简单数据类型 Number 数字类型 String 字符串类型 Boolean 布尔类型 Undefined 变量未初始化 Null 空类型 复杂数据 ... 
- go语言学习---使用os.Args获取简单参数(命令行解析)
			实例1: //main package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args ... 
- 同一个Tomcat部署多个springboot项目问题
			2018-12-13 10:37:21,412 ERROR [localhost-startStop-2] c.a.d.s.DruidDataSourceStatManager [DruidDataS ... 
- Net core 2.x 升级 3.0 使用自带 System.Text.Json 时区 踩坑经历
			.Net Core 3.0 更新的东西很多,这里就不多做解释了,官方和博园大佬写得很详细 关于 Net Core 时区问题,在 2.1 版本的时候,因为用的是 Newtonsoft.Json,配置比较 ... 
- Java NIO和IO的区别
			下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异. 复制代码 代码如下: IO NIO面向流 面向缓冲阻塞IO 非阻塞IO无 选择器 面向流与面向缓冲 Java NIO ... 
- Matlab单例模式
			classdef SingletonClass < handle methods(Access = private) function obj = SingletonClass() disp(' ... 
- javascript 数组排序原理的简单理解
			js内置的Array函数原型对象有个sort方法,这个方法能按照顺序排序数组. 例如: var arr1 = [6, 4, 2, 5, 2]; arr1.sort((x, y) => x - y ... 
- IOS模拟器调试ANE
			来源:http://www.tuicool.com/articles/AFRJzi 利用iOS模拟器来检测和调试AIR应用程序补充篇 Air3.4来了 除去可以直接往模拟器里面部署应用,还可以往真机里 ... 
- pillow安装出错的解决办法
			apt-get install python3-dev python3-setuptools libtiff5-dev zlib1g-dev libfreetype6-dev liblcms2-dev ... 
- 广联达C++面经(一站式西安) - 2019秋招
			9月7号通知在广联达西安面试,早上在高新面完中兴一面就赶忙坐地铁倒公交去面试了. 一面(大概30-40min) 刚去签了一个到,就带我去面试了,在一个小型会议室,面试我的是一个女面试官(第一次碰见女 ... 
