语法速学,返回数组 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 ...
随机推荐
- (七)linux 学习 -- 键盘高级操作技巧
The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap09.html 文章目录 移动光标 修改文本 ...
- c++ map容器使用及问题
C++ STL库map容器一些总结,欢迎大家指正补充. map容器由两部分组成,分别为关键字(Key)和值(Value),关键字和值都可以声明为任意类型的数据,注意:关键字唯一,不能重复!使用需包含头 ...
- Python 运算符 各类运算符总结
运算符详解2.1.算术运算符2.2.比较(关系)运算符2.3.赋值运算符2.4.逻辑运算符2.5.位运算符2.6.成员运算符2.7.身份运算符三.重要运算符说明3.1.join和符号”+“区别3.2. ...
- Ubuntu /etc/security/limits.conf 不生效问题
一.问题描述 修改 /etc/security/limits.conf ,重启之后不生效 内容如下: * soft nofile * hard nofile root soft nofile root ...
- VirtualBox安装文档教程
1找到安装包双击打开 2 3 这里可以更改安装路径 4 5 6 7 等待安装 8
- go 语言学习 ---解析xml
实例1 //main package main import ( "bytes" "encoding/xml" "fmt" "io ...
- [unity]GPU Instance学习
前言我们之前研究过为什么Unity的UI可以合批,是因为使用了相同的材质进行渲染,UI上不同图片渲染是通过把图片打成一张图集后,使用Image组件对顶点填充了不同的UV值实现的.那么有没有什么办法可以 ...
- 5_PHP数组_3_数组处理函数及其应用_7_数组排列函数
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组排列函数 1. sort() 函数 程序: <?php $array = array("img ...
- idea 自动生产 api文档
第一: 打开idea,选择项目.点击工具栏 Tools->Generate JavaDOC 第二: 主要分为三部分内容. 1,Generate JavaDoc scope 要扫描生成api的范围 ...
- SocketException: Write failed (OS Error: Broken pipe, errno = 32
https://github.com/flutter/flutter/issues/16491