Esponendo l'API di blocco in golang?

1

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 a mylib.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 a select 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?

    
posta mappu 18.01.2016 - 05:56
fonte

1 risposta

1

Ho trovato una risorsa sull'argomento:

Alla fine, sono convinto che un'API basata sul canale sia probabilmente la via da seguire (almeno per un pacchetto v1), seguendo l'esempio di stdlib crypto/ssh .

Tuttavia, il suddetto link ha strongmente messo in guardia contro l'implementazione di un'API basata sul canale, menzionando una serie di problemi (descrivendo adeguatamente i limiti del buffer, il comportamento del caso limite, il comportamento dell'esaurimento e così via)

    
risposta data 23.01.2016 - 01:58
fonte

Leggi altre domande sui tag