【问题标题】:Golang gRPC server-streamGolang gRPC 服务器流
【发布时间】:2017-05-28 08:33:35
【问题描述】:

我对 golang 上的 gRPC 服务器流有一些问题。 我对一行没有问题,我只是使用了简单的 gRPC 响应。 但是现在我需要从我的数据库中发送一些行并且我无法完成我的服务器流应用程序。

我刚刚学习了 Golang 和 gRPC,这个任务对我来说现在解决这个任务有点困难。如果有人可以提供帮助,我将非常感激,因为网络上没有太多这种材料的例子。 或者你现在可以在哪里找到一个例子,如何使用 gRPC + golang 从数据库流式传输数据。谢谢

我有这个代码:

....

type record struct {
id       int
lastname string
}

type server struct {

}

func (s *server) QueryData(city *pb.City, stream pb.GetDataStream_QueryDataServer) error {

db, err := sql.Open("postgres", "postgres://adresspass")
if err != nil {
    log.Fatal(err)
}

defer db.Close()

rows, err := db.Query(`SELECT id, last_name FROM  person WHERE city=$1`, city.City)
if err != nil {
    log.Fatal(err)
}

var rs = make([]record, 0)
var rec record

for rows.Next() {
    err = rows.Scan(&rec.id, &rec.lastname)
    if err != nil {
        return err
    }

    rs = append(rs, rec)
}

for _, onedata := range rs {
    if err := stream.Send(onedata); err != nil {
        return err
    }
}
return nil
}

...

【问题讨论】:

  • 与你的问题无关,但你应该试试代码格式化工具:blog.golang.org/go-fmt-your-code
  • @Alex 我可以建议添加更多信息,例如:任何错误消息以及预期结果是什么。

标签: go grpc


【解决方案1】:

您应该将数据库中的值作为协议缓冲区类型而不是本机类型进行扫描。

你应该已经在 proto 文件中定义了消息格式

message DbVal{
 uint32 id = 1;
 message string = 2;
}

然后将该结构传递给流。

【讨论】:

    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2023-03-27
    • 2018-01-09
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多