grpc 如何将model数据转换为proto生成的结构体返回?

发布于 2022-09-12 13:21:25 字数 1272 浏览 26 评论 0

刚开始学习grpc 遇到问题请教下

model:

type User struct {
 Id       int64 `json:"id"`
 Nickname string `json:"nickname"`
}

func  Users()[]*User {
   var rows []*User
   db.Find(&rows)
   return rows
}

proto

type User struct {
 Id                   int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
 Nickname             string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"`
 XXX_NoUnkeyedLiteral struct{} `json:"-"`
 XXX_unrecognized     []byte `json:"-"`
 XXX_sizecache        int32 `json:"-"`
}

response

type UserResponse struct {
   Message              string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
 Data                 []*User `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"`
 XXX_NoUnkeyedLiteral struct{}      `json:"-"`
 XXX_unrecognized     []byte `json:"-"`
 XXX_sizecache        int32 `json:"-"`
}

userServer

func (c *userServer) Users(ctx context.Context, request *pb.UserRequest, response *pb.UserResponse) error {
  users := model.Users()
  
  // 这里要将[]*model.User 返回 但是pb生成的是[]*pb.User
  // 请问要如何解决呢?
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

策马西风 2022-09-19 13:21:25
func (c *userServer) Users(ctx context.Context, request *pb.UserRequest, response *pb.UserResponse) error {
  users := model.Users()
  for _,u := range users {
    pb.Data = append(pb.Data, &pb.User{Id:u.Id,Nickname:u.Nickname})
  }
  // 这里要将[]*model.User 返回 但是pb生成的是[]*pb.User
  // 请问要如何解决呢?
}
也只是曾经 2022-09-19 13:21:25

这个是不同的对象,只能像一楼遍历重新赋值

非要怀念 2022-09-19 13:21:25

楼上需要赋值+1,如果struct field 比较多。可以使用https://github.com/jinzhu/copier。 不用再手动写一遍了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文