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
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.
Die Ausgabe, die es erzeugt, ist dies:
%Vor% Die stdlib bietet jetzt etwas wie jimts PassThru
: io.TeeReader . Es hilft, die Dinge ein wenig zu vereinfachen:
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.