语法速学,返回数组 repeated修饰符
2024-10-20 16:48:29
重新编写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)
}
最新文章
- javascript的变量作用域--对比js、php和c的for循环
- 阿里云服务器Linux CentOS安装配置(十)安装Discuz
- 【整理】--【GPIO】OK6410
- Auto Updating the exe from a network location when application starts z
- Perl的DATA文件句柄
- 介绍一下linux的文件系统
- cron服务 ubuntu
- 谈 DevOps 自动化时,也应该考虑到 SOX 等法案
- c++ string assign =
- 如何利用多核CPU来加速你的Linux命令
- 按钮的图标 Button icons-JQUERY MOBILE 1.0正式版中文手册
- js面向对象小结(工厂模式,构造函数,原型方法,继承)
- c#十进制转二进制算法 和字符串反转算法
- VS 2017 激活码
- mvc学习过程碰到问题
- 数码管应用digital_pile
- hadoop_批量命令脚本&;同步文件脚本
- POJ 1459&;&;3436
- kali_install_complete_no_sound
- MobSF 框架安装使用部署