我在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
}
...
答案 0 :(得分:0)
您应该将数据库中的值扫描为协议缓冲区类型而不是本机类型。
您应该在proto文件中定义了一种消息格式
message DbVal{
uint32 id = 1;
message string = 2;
}
将该结构传递给流。