Golang gRPC服务器流

时间:2017-01-13 02:52:55

标签: go grpc

我在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
}

...

1 个答案:

答案 0 :(得分:0)

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

您应该在proto文件中定义了一种消息格式

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

将该结构传递给流。