go-micro 微服务 proto的repeated字段动态赋值

新学go-micro设计微服务,遇到返回结果为多条,即把返回字段设置为repeated,即相当于go中的slice(java中的数组)进行赋值。下面介绍一下在未知返回数据条数的情况下的动态赋值方法

proto文件

syntax = "proto3";
package test;
option go_package="./test";

service Test {
    rpc Testfordb (Dbinput) returns (Dboutput) {}
}
message Dbinput{
    int64 id=1;
    string name =2;
    string status=3;
    string time=4;

}

message Dboutput{
    string code=1;
    repeated Dblist list=2;
}
message Dblist{

    int64 id=1;
    string name =2;
    string status=3;
    string time=4;
}

 微服务方法

package handler

import (
	"context"
	"fmt"
	"micro-service/db"
	"micro-service/model"
	test "micro-service/proto/test"
)

type Test struct{}
func (e *Test) Testfordb(ctx context.Context, req *test.Dbinput, rsp *test.Dboutput) error {
	sqlStr := "SELECT * FROM user"
	var u []model.User
	if err := db.Db.Select(&u, sqlStr); err != nil {

		fmt.Printf("get data failed, err:%v\n", err)

		return nil
	}
	if len(u) == 0 {
		rsp.Code = "NUll"
		return nil
	}
	for i := 0; i <len(u); i++ {
		rsp.List=append(rsp.List,&test.Dblist{
			Id:u[i].Id.Int64,
			Time:u[i].Time.Time.String(),
			Status: u[i].Status.String,
		})
	}
	//rsp.List=rows
		return nil
	}

 

posted @ 2022-06-02 10:03  小白猿陈  阅读(692)  评论(0)    收藏  举报