Heim  >  Artikel  >  Backend-Entwicklung  >  Wird Golang das Lesen blockieren?

Wird Golang das Lesen blockieren?

(*-*)浩
(*-*)浩Original
2019-12-17 10:34:254587Durchsuche

Wird Golang das Lesen blockieren?

Die Reader-Schnittstelle in der Go-Sprache definiert eine Leseoperation, und diejenigen, die die Reader-Schnittstelle implementieren, verfügen über die Lesefunktion. n repräsentiert die tatsächliche Anzahl der diesmal gelesenen Bytes (0 & lt; = n & lt; = len (p))

err Gibt den Fehlerbericht dieses Lesevorgangs an (falls vorhanden, nil, wenn nicht) Auch wenn die Anzahl der gelesenen Bytes n kleiner als len(p) ist, kann der aufrufende Körper sie auch während des Funktionsaufrufs verwenden . Der gesamte p-Raum (ich weiß nicht, was diese Beschreibung ausdrücken soll)

Beim Lesen von Daten, auch wenn len(p) nicht ausreicht (zu diesem Zeitpunkt befinden sich keine Daten im IO-Cache Zeit) wird der Lesevorgang normalerweise direkt ausgeführt. Geben Sie die erhaltenen Daten zurück, anstatt weiterhin darauf zu warten, dass weitere Daten im E/A-Puffer ankommen.

Wenn beim Lesevorgang ein Fehler auftritt oder der Vorgang beendet ist Nachdem die Datei n Datenbytes erfolgreich gelesen hat, werden die n gelesenen Datenbytes zurückgegeben, und die Rückgabe von err kann dann zwei Vorgänge haben:

In diesem Lesevorgang sind n (>0 ) und err (nicht Null) werden zurückgegeben.

Oder dieser Lesevorgang gibt n (>0) und Null zurück, und der nächste Aufruf gibt 0 und err (nicht Null) zurück

Beide Vorgänge sind möglich, daher sollte der Anrufer immer zuerst feststellen, ob Daten gemäß n>0 zurückgegeben werden, anstatt zuerst festzustellen, ob err Null ist

Zum Beispiel, wenn ein bestimmter Anruf das Ende erreicht der Datei und liest auch Wenn n Bytes an Daten benötigt werden, kann Reader auf zwei Arten implementiert werden:

Der aktuelle Aufruf gibt n und einen EOF-Fehler zurück

Der aktuelle Aufruf gibt n zurück und Null, und der nächste Aufruf gibt 0 zurück. Und die Implementierung von EOF

Read sollte nicht 0 und Null zurückgeben, das heißt, wenn 0 zurückgegeben wird, sollte ein Fehler ungleich Null zurückgegeben werden, es sei denn, die Größe des Puffers Wenn das Leerzeichen 0 ist, sollte der Aufrufer den Aufruf von 0 ignorieren und Rückgabewertkombinationen wie Null werden so behandelt, als ob nichts passiert wäre. Es wird besonders betont, dass diese Rückgabe kein EOF anzeigt

Das obige ist der detaillierte Inhalt vonWird Golang das Lesen blockieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn