Implémentation d'un pointeur vide dans Go
Dans Go, l'absence de pointeurs vides et d'héritage peut poser un défi lors de la tentative de création de structures de données qui peut contenir des valeurs de tout type. Cependant, il existe une solution qui exploite le concept de l'interface vide :
interface{}
Selon la spécification du langage de programmation Go, chaque type implémente l'interface vide, ce qui signifie qu'il peut représenter n'importe quel type. En déclarant une variable ou un champ de structure de type interface{}, vous pouvez stocker efficacement des valeurs de n'importe quel type à cet emplacement.
Cette technique fournit des fonctionnalités similaires aux pointeurs vides de C, vous permettant de gérer des valeurs de types arbitraires sans besoin de déclarer des types spécifiques. Par exemple, considérons l'exemple suivant :
type DataStore struct { Data []interface{} } func (ds *DataStore) Add(value interface{}) { ds.Data = append(ds.Data, value) } func main() { ds := &DataStore{} ds.Add("Hello") ds.Add(42) ds.Add(struct{ Name string }{Name: "Alice"}) // Print the stored values for _, v := range ds.Data { fmt.Println(v) } }
Dans cet exemple, la structure DataStore contient une tranche de valeurs d'interface{}. Nous pouvons ensuite ajouter dynamiquement des valeurs de différents types dans cette tranche à l'aide de la méthode Add. La fonction principale montre comment stocker et imprimer des valeurs de différents types dans notre DataStore.
Depuis Go 1.18, un alias pour interface{} appelé any est disponible, fournissant un raccourci pratique :
type DataStore struct { Data []any }
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!