Wie in vielen anderen Antworten hier und anderswo richtig erwähnt, ResponseWriter
handelt es sich um eine Schnittstelle, deren Auswirkungen in SO- Antworten und Blogs ausführlich beschrieben wurden .
Was ich ansprechen möchte, ist meiner Meinung nach das große - und gefährliche - Missverständnis hier, dass die Grundanforderung als "Referenz" übergeben wird (obwohl so etwas in Go nicht wirklich existiert ), dass "wir Änderungen vornehmen wollen dazu sichtbar für den Server ".
Ein paar Antworten zitieren:
[..] es ist nur eine Struktur, und da wir diese Struktur ändern möchten und der Webserver diese Änderungen sehen soll, muss es ein Zeiger sein [..] SO
[..] Änderungen an Request by the Handler müssen für den Server sichtbar sein, daher übergeben wir sie nur als Referenz anstatt als Wert [..] SO
Das ist falsch ; Tatsächlich warnen die Dokumente ausdrücklich davor, die Anfrage zu manipulieren oder zu mutieren :
Mit Ausnahme des Lesens des Körpers sollten Handler die bereitgestellte Anforderung nicht ändern.
Im Gegenteil, nein? :-)
Wenn Sie die Anforderung ändern möchten, z. B. einen Ablaufverfolgungsheader anhängen, bevor Sie ihn an den nächsten Handler in einer Middleware-Kette weiterleiten, müssen Sie die Anforderung kopieren und die kopierte Version an die Kette weitergeben.
Anfragen um das Verhalten zu ändern Änderungen der eingehenden Anforderung zu ermöglichen , erhoben wurden mit dem Go - Team aber zumindest einig vorhandener Code wahrscheinlich führen würden wie folgt zu ändern unerwartet brechen.
Warum einen Zeiger verwenden, wenn wir den Leuten ausdrücklich sagen, dass sie die Anfrage nicht mutieren sollen? Performance , Request
ist eine große Struktur und Kopieren kann Leistung bringen, vor allem bei langen Middleware - Ketten im Auge behalten. Das Team musste ein Gleichgewicht finden, definitiv keine ideale Lösung, aber die Kompromisse sind hier eindeutig auf der Seite der Leistung (anstelle der API-Sicherheit).