En programmation C, un pointeur vide permet d'accéder aux emplacements mémoire de diverses données genres. Go, cependant, n'a pas d'équivalent direct aux pointeurs void. Cela pose un défi lors de la conception de structures de données qui nécessitent la possibilité de stocker des types arbitraires.
Selon la spécification du langage de programmation Go, chaque type in Go est membre de l'interface vide "interface{}". Cette interface n'a aucune méthode, ce qui la rend applicable à tous les types. Par conséquent, en utilisant l'interface vide, on peut obtenir efficacement la fonctionnalité d'un pointeur vide dans Go.
Considérons l'exemple suivant d'une structure de données qui peut contenir n'importe quel type en utilisant le vide interface :
type ArrayList struct { data []interface{} }
Pour ajouter une valeur de n'importe quel type à l'ArrayList :
list := ArrayList{} list.data = append(list.data, 5) list.data = append(list.data, "Hello")
Pour accéder à une valeur de n'importe quel type à partir de l'ArrayList :
value := list.data[1] switch t := value.(type) { case int: fmt.Printf("The value is an integer: %d\n", t) case string: fmt.Printf("The value is a string: %s\n", t) case float64: fmt.Printf("The value is a float64: %f\n", t) }
Dans Go 1.18 et versions ultérieures, vous pouvez également utiliser l'alias intégré any, qui est équivalent à interface{}, pour un code encore plus concis :
type ArrayList struct { data []any }
En tirant parti de l'interface vide{} (ou de toute autre dans Go 1.18), Go fournit un mécanisme flexible pour créer des structures de données capables de contenir et de manipuler des valeurs de types arbitraires. Cela émule efficacement la fonctionnalité d'un pointeur vide en C, permettant une plus grande flexibilité et une plus grande sécurité de type dans les programmes Go.
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!