In Go stellt der Compiler sicher, dass ein Typ die öffentlichen Funktionen einer Schnittstelle implementiert. Dies wird als Typprüfung zur Kompilierungszeit bezeichnet. Das Codebeispiel von camlistore demonstriert dieses Konzept.
var ( _ blobref.StreamingFetcher = (*CachingFetcher)(nil) _ blobref.SeekFetcher = (*CachingFetcher)(nil) _ blobref.StreamingFetcher = (*DiskCache)(nil) _ blobref.SeekFetcher = (*DiskCache)(nil) )
Das Präfix _ gibt an, dass keine Variable erstellt wird. Stattdessen werden die Anweisungen verwendet, um anzugeben, dass die benannten Typen die entsprechenden Schnittstellen implementieren.
Der rechte Teil (RHS) verwendet die Konvertierungssyntax (*T)(nil). Diese Syntax erstellt einen typisierten Nullwert. Ein Nullwert ist ein spezieller Wert, der das Fehlen eines Werts darstellt. Ein typisierter Nullwert ist ein Nullwert, der einen bestimmten Typ hat.
In diesem Fall erstellt (*T)(nil) einen Nullwert, der den Typ *T hat. Dies entspricht der Deklaration einer Zeigervariablen und deren Zuweisung an Null. Der Nullwert kann dann verwendet werden, um einen Zeiger desselben Typs zuzuweisen.
Zum Beispiel deklariert der folgende Code eine Zeigervariable f vom Typ StreamingFetcher:
var f blobref.StreamingFetcher
Der folgende Code weist dann f einen Nullwert vom Typ *CachingFetcher zu:
f = (*CachingFetcher)(nil)
Diese Zuweisung ist gültig, da der CachingFetcher-Typ die StreamingFetcher-Schnittstelle implementiert.
Das obige ist der detaillierte Inhalt vonWie stellt der Compiler von Go die Schnittstellenkonformität zur Kompilierungszeit sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!