Maison > développement back-end > Golang > Comment les génériques de Go 1.18 peuvent-ils résoudre le problème de la création de valeurs typées sans provoquer de plantage du programme ?

Comment les génériques de Go 1.18 peuvent-ils résoudre le problème de la création de valeurs typées sans provoquer de plantage du programme ?

Barbara Streisand
Libérer: 2024-12-06 01:29:09
original
857 Les gens l'ont consulté

How Can Generics in Go 1.18 Solve the Problem of Creating Typed Values Without Causing Program Crashes?

Comment utiliser les génériques dans Go 1.18 pour créer des valeurs typées

Dans la programmation Go, les génériques permettent la création de code qui fonctionne sur différents types sans avoir besoin d'un casting explicite ou d'assertions de type. Cet article explore comment utiliser des génériques dans Go 1.18 pour créer de nouveaux objets de valeurs typées.

Contexte : exemple de Fruit Factory

Considérez l'exemple simplifié suivant de "Fruit Factory" qui tente de créer de nouvelles instances de fruits de manière générique :

type FruitFactory[T any] struct{}

func (f FruitFactory[T]) Create() *T {
    // How do we create a non-nil fruit here?
    // Returning nil crashes the example.
    return nil
}

type Apple struct {
    color string
}
Copier après la connexion

Dans cet exemple, la tâche consiste à compléter la fonction Créer pour créer une nouvelle instance de type T (c'est-à-dire *Apple dans le cas du type Apple). Cependant, renvoyer simplement nil est insuffisant et provoque le crash du programme lors de l'accès aux propriétés de l'objet.

Solution : création d'objets typés

Il existe deux manières principales de créer un nouvelle instance d'une valeur typée utilisant des génériques dans Go 1.18 :

  1. Déclaratif Affectation : Déclarer une variable typée et renvoyer son adresse :
func (f FruitFactory[T]) Create() *T {
    var a T
    return &a
}
Copier après la connexion
  1. Initialisation avec un nouveau mot-clé : Utiliser new pour allouer et initialiser l'objet :
func (f FruitFactory[T]) Create() *T {
    return new(T)
}
Copier après la connexion

Ces solutions permettent à la fonction de créer une valeur non-pointeur (une ou new(T)) et, si nécessaire, convertissez-le en type pointeur en renvoyant son adresse (&a).

Exemple d'implémentation

Dans la "Fruit Factory" exemple :

func (f FruitFactory[T]) Create() *T {
    var a T
    return &a
}

func example() {
    appleFactory := FruitFactory[Apple]{}
    apple := appleFactory.Create()
    apple.color = "red" // No panic now
}
Copier après la connexion

Cette modification permet de créer un nouvel objet Apple et de définir ses propriétés sans rencontrer de segmentation faute.

Conclusion

Avec les génériques dans Go 1.18, la programmation avec des valeurs saisies est grandement simplifiée. En tirant parti de l'affectation déclarative ou du mot-clé new, il est possible de créer de manière transparente de nouvelles instances de n'importe quel type, éliminant ainsi le besoin de conversion manuelle et d'assertions de type sujettes aux erreurs.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal