Ho una libreria golang che astrae un servizio di rete (penso allo stesso modo di IRC). Il server di rete produce eventi che gli utenti della mia biblioteca dovrebbero consumare. Sto usando internamente le chiamate di rete di blocco. Voglio progettare la mia API per ridurre al minimo gli utenti di friction della mia libreria, quindi sto cercando di decidere tra
-
con l'utente che fornisce
func
callback amylib.doStuff()
, che entrerebbe nel ciclo di blocco della rete della mia biblioteca; spetterebbe al chiamante fare da sfondo a una goroutine se lo desidera (e quindi eseguire la propria sincronizzazione, se necessario); o -
l'utente chiama
mylib.startDoingStuff()
, che genera una goroutine di background per gestire le chiamate di rete bloccanti, restituendo più canali di eventi per il chiamante aselect
over. Ha il vantaggio di isolare la goroutine e il blocco dal codice chiamante.
Cosa c'è di più idiomatico? Cosa ti aspetti di vedere in una libreria di rete?