重新编写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)
}

最新文章

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

热门文章

  1. KAFA架构及其基本概念
  2. java笔记--java的语言特性
  3. Python-22-并发编程
  4. Nmap脚本使用
  5. day20——规范化目录
  6. gorm 批量插入数据
  7. html5 iframe
  8. jenkins配合dockerfile部署项目
  9. 快速生成html文本文档——typora
  10. 转 Json数据格式化