Warum Go die Verwendung von Methodensätzen auf *T durch T verbietet
In Go können Methoden verwendet werden, die für einen Werttyp T definiert sind von T und *T, während Methoden, die auf einem Zeigertyp *T definiert sind, von T nicht verwendet werden können. Diese scheinbar willkürliche Unterscheidung ergibt sich aus der Komplexität des Speichers in Computersystemen.
Unfähigkeit, Zeiger zu erhalten Nachfrage
Betrachten Sie den Fall, in dem eine Methode auf *T mithilfe einer T-Variablen aufgerufen werden soll. Um dies zu erreichen, muss ein Zeiger auf die T-Variable erhalten werden. Es ist jedoch nicht immer garantiert, dass das Erhalten eines Zeigers möglich ist.
Die Spezifikation von Go gibt explizit die Bedingungen an, unter denen eine Adressoperation (&) ausgeführt werden kann. Dazu gehören der Zugriff auf Variablen, Zeigerindirektionen und Array-Indizierungsoperationen. Der Zugriff auf eine in einer Map gespeicherte Variable ist jedoch ausgeschlossen, wie im folgenden Beispiel:
<code class="go">res := TMap["key"].pointerMethod()</code>
In solchen Fällen ist es unpraktisch, einen Zeiger auf die Variable zu erhalten, da dies Einschränkungen für die Laufzeitimplementierung von mit sich bringen würde Datenstrukturen wie Karten.
Konsequenzen des Designs
Diese Designentscheidung hat sowohl Vor- als auch Nachteile:
Vorteile:
Nachteile:
Das obige ist der detaillierte Inhalt vonWarum können auf *T definierte Go-Methoden nicht von T verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!