Methoden für Interface-Zeiger in Go aufrufen

8

Ich umgebe immer noch meinen Kopf um die feineren Details von Schnittstellen und Zeigern in Go. Ich bin auf ein Problem mit einem einfachen Typ gestoßen, der einen Zeiger auf net.Conn enthält. Wenn ich versuche, eine Methode (Close) auf dem Zeiger aufzurufen, erhalte ich type *net.Conn has no field or method Close

Hier ist ein triviales Beispiel, das das Problem hervorhebt: Ссылка

Was ist der richtige Weg, Close() hier aufzurufen?

    
ben lemasurier 05.03.2014, 21:09
quelle

2 Antworten

12

Kurze Antwort ist "Verwenden Sie keine Zeiger auf Schnittstellen". Es gibt selten Bedarf für sie, und Sie enden mit verwirrenden Fehlern, wie Sie sehen.

Sie würden auch niemals new() verwenden, um einen Zeiger auf eine leere Schnittstelle zu erstellen. Schnittstellen werden implizit durch einen konkreten Typ erfüllt.

    
JimB 05.03.2014, 21:14
quelle
10

Ein net.Conn ist eine kleine (Zwei-Wort) Struktur. Wenn die Implementierung ein Zeiger ist, ist das net.Conn, das diese Implementierung enthält, auch wie ein Zeiger. In Ссылка finden Sie eine Beschreibung, wie Schnittstellen unter der Haube funktionieren.

    
Russ Cox 05.03.2014 21:23
quelle

Tags und Links