Wie werden die Bytes gedruckt, während die Datei heruntergeladen wird? -golang

7

Ich frage mich, ob es möglich ist, die Anzahl der heruntergeladenen Bytes zu zählen und zu drucken, während die Datei heruntergeladen wird.

%Vor%

Aus irgendwelchen Gründen lässt mich SO die Frage nicht einreichen, denn "es sieht so aus, als ob Ihr Beitrag hauptsächlich aus Code besteht; bitte fügen Sie weitere Details hinzu", also schreibe ich einfach dieses

    
The user with no hat 15.03.2014, 08:20
quelle

3 Antworten

27

Wenn ich Sie richtig verstehe, möchten Sie die Anzahl der gelesenen Bytes anzeigen, während die Daten übertragen werden. Vermutlich um eine Art Fortschrittsbalken oder etwas Ähnliches zu erhalten. In diesem Fall können Sie die Datenstrukturen von Go verwenden, um den Reader oder Writer in eine benutzerdefinierte io.Reader - oder io.Writer -Implementierung zu verpacken.

Es leitet einfach den entsprechenden Aufruf Read oder Write an den zugrunde liegenden Stream weiter und führt dabei zusätzliche Arbeit mit den von ihnen zurückgegebenen (int, error) -Werten aus. Hier ist ein Beispiel, das Sie auf dem Go-Spielplatz ausführen können.

%Vor%

Die Ausgabe, die es erzeugt, ist dies:

%Vor%     
jimt 15.03.2014, 10:39
quelle
6

Die stdlib bietet jetzt etwas wie jimts PassThru : io.TeeReader . Es hilft, die Dinge ein wenig zu vereinfachen:

%Vor%

Spielplatz

    
Dave Jack 31.12.2015 06:57
quelle
2

Das Grab Go-Paket implementiert Fortschrittsupdates (und viele andere Funktionen) für das Herunterladen von Dateien.

Ein Beispiel für Aktualisierungen des Druckfortschritts während eines Downloads ist in der folgenden exemplarischen Vorgehensweise enthalten: Ссылка

Sie können grab.GetAsync , das heruntergeladen wird, grundsätzlich in einer neuen Go-Routine aufrufen und dann die BytesTransferred oder Progress der zurückgegebenen grab.Response vom aufrufenden Thread überwachen.

    
Ryan Armstrong 19.01.2016 11:26
quelle

Tags und Links