Meine Situation ist dies: Es ist drei Wochen her, und einige ungerade Stunden, da ich von rissen geworden bin Golang. Ich arbeite an einem Blockchain-Dump-Tool für Steem, und ich werde github.com/go-steem/rpc, der Bibliothek, auf die ich mich momentan verlasse, einen Hauch von gjson geben. Nun, mit dieser Frage geht es um die Goroutines für meinen aktuellen Blockchain-Leser. Hier ist es (leider ein bisschen auf der bulligen Seite, aber Sie werden den Teil zu sehen, dass ich wieder in die Bibliothek ziehen will, auch):
// Keep processing incoming blocks forever.
fmt.Println("---> Entering the block processing loop")
for {
// Get current properties.
props, err := Client.Database.GetDynamicGlobalProperties()
if err != nil {
fmt.Println(err)
}
// Process blocks.
for I := uint32(1); I <= props.LastIrreversibleBlockNum; I++ {
go getblock(I, Client, Rsession)
}
if err != nil {
fmt.Println(err)
}
}
}
func getblock(I uint32, Client *rpc.Client, Rsession *r.Session) {
block, err := Client.Database.GetBlock(I)
fmt.Println(I)
writeBlock(block, Rsession)
if err != nil {
fmt.Println(err)
}
}
func writeBlock(block *d.Block, Rsession *r.Session) {
//rethinkdb writes
r.Table("transactions").
Insert(block.Transactions).
Exec(Rsession)
r.Table("blocks").
Insert(block).
Exec(Rsession)
}
ich nur ein Drittel bearbeiten angeschnitten, das war um die Funktion writeBlock von goroutine getBlock aufzurufen, anstatt wie früher. Ich '
Es würde helfen, wenn Sie das isolieren könnte Ausgabe und Erstellung eines reproduzierbaren Snippets (noch besser wäre ein Test) ohne Verbindung zu verschiedenen Ressourcen (zB Datenbank). Mir ist auch nicht klar, um welches Problem es sich handelt. Tritt ein bestimmter Fehler auf (d. H. Deadlock)? Wenn ja, können Sie den Fehler posten? – themihai
Hm. Also, nein, ich weiß nicht-- Ich wusste nicht, dass Deadlock einen Fehler zurückgibt. Und, Sie haben es, lassen Sie mich auf diesen Codeblock einige hämmern, um die Verschrobenheit zu isolieren. Danke! –
In 5 Minuten oder so werde ich eine "Schnitt auf den Knochen (keine Blockaw) Version des gleichen Codes. Danke. –