Dans Go, le compilateur garantit qu'un type implémente les fonctions publiques d'une interface. C’est ce qu’on appelle la vérification du type au moment de la compilation. L'exemple de code de camlistore illustre ce concept.
var ( _ blobref.StreamingFetcher = (*CachingFetcher)(nil) _ blobref.SeekFetcher = (*CachingFetcher)(nil) _ blobref.StreamingFetcher = (*DiskCache)(nil) _ blobref.SeekFetcher = (*DiskCache)(nil) )
Le préfixe _ indique qu'aucune variable n'est en cours de création. Au lieu de cela, les instructions sont utilisées pour spécifier que les types nommés implémentent les interfaces correspondantes.
La partie de droite (RHS) utilise la syntaxe de conversion (*T)(nil). Cette syntaxe crée une valeur nulle typée. Une valeur nulle est une valeur spéciale qui représente l'absence de valeur. Une valeur nulle typée est une valeur nulle qui a un type spécifique.
Dans ce cas, (*T)(nil) crée une valeur nulle qui a le type *T. Cela équivaut à déclarer une variable de pointeur et à lui attribuer la valeur nil. La valeur nulle peut ensuite être utilisée pour attribuer à un pointeur du même type.
Par exemple, le code suivant déclare une variable de pointeur f de type StreamingFetcher :
var f blobref.StreamingFetcher
Le code suivant puis attribue une valeur nulle de type *CachingFetcher à f:
f = (*CachingFetcher)(nil)
Cette affectation est valide car le type CachingFetcher implémente l'interface StreamingFetcher.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!