2017-01-13 94 views
2

我在golang上遇到gRPC服務器流問題。 我對一行沒有問題,我只是使用了簡單的gRPC響應。 但現在我需要從我的數據庫發送一些行,我無法完成我的服務器流應用程序。Golang 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

與您的問題無關,但您應該嘗試使用代碼格式工具:https://blog.golang.org/go-fmt-your-code – miltonb

+0

@Alex我可以建議添加更多信息,例如:任何錯誤消息以及預期的結果是什麼。 – Mark

回答

0

你應該從數據庫協議緩衝區類型,而不是原生類型的掃描你的價值觀。

你應該在原型文件

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

已經定義了一個消息格式和結構傳遞到流。

相關問題