Maison >développement back-end >Golang >Comment le compilateur de Go garantit-il la conformité de l'interface au moment de la compilation ?

Comment le compilateur de Go garantit-il la conformité de l'interface au moment de la compilation ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-29 22:21:29406parcourir

How Does Go's Compiler Ensure Interface Compliance at Compile Time?

Vérification du type de compilation de conformité de l'interface Golang

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn