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
}
浙公网安备 33010602011771号