Der Grund, warum es ein Zeiger auf Request ist, ist einfach: Änderungen an Request durch den Handler müssen für den Server sichtbar sein, so dass wir ihn nur als Referenz statt als Wert übergeben.
Wenn Sie in den net/http-Bibliothekscode eintauchen, werden Sie feststellen, dass ResponseWriter eine Schnittstelle zu einer nicht exportierten struct-Antwort ist und wir die Struktur als Referenz übergeben (wir geben einen Zeiger auf die Antwort) und nicht nach Wert. ResponseWriter ist eine Schnittstelle, die ein Handler zum Erstellen einer HTTP-Antwort verwendet. Das eigentliche Struktur-Backup von ResponseWriter ist die nicht-exportierte Struktur http.response. Da sie nicht exportiert wird, können Sie sie nicht direkt verwenden. Sie können es nur über die ResponseWriter-Schnittstelle verwenden.
Mit anderen Worten, beide Parameter werden als Referenz übergeben; Es ist nur so, dass die Methodensignatur einen ResponseWriter verwendet, der eine Schnittstelle zu einem Zeiger auf eine Struktur darstellt, so dass es aussieht, als ob sie nach Wert übergeben wird.
Ich glaube nicht, dass das richtig ist. Werte hinter Zeigern können Schnittstellen genauso wie Werte implementieren, so dass hier keine Unterscheidung erforderlich ist. Ein Typ mit dem Basistyp int kann eine Schnittstelle erfüllen, ohne ein Zeiger zu sein oder von einem solchen unterstützt zu werden. – nemo
Nun, ich wollte nicht andeuten, dass alle Dinge, die eine Schnittstelle implementieren, Zeiger sein müssen.Etwas wie ein ResponseWriter, der den Status des Wertes hinter der Schnittstelle ändern müsste, um irgendetwas Nützliches zu tun, und das erfordert, dass der Wert ein Zeigertyp ist (wie der Blogbeitrag, mit dem ich verlinkt habe, auch sagt). Aber ja, http.ResponseWriter könnte theoretisch durch einen int implementiert werden (dessen Methoden diesen int-Wert niemals ändern könnten). – nos