Maison > développement back-end > Golang > Comment les génériques de Go peuvent-ils être utilisés pour implémenter un type de type flexible et sécurisé ?

Comment les génériques de Go peuvent-ils être utilisés pour implémenter un type de type flexible et sécurisé ?

Barbara Streisand
Libérer: 2024-12-09 01:34:09
original
288 Les gens l'ont consulté

How Can Go's Generics Be Used to Implement a Flexible and Type-Safe Either Type?

Implémentation des types génériques de l'un ou l'autre dans Go

Avec l'introduction des génériques dans Go 1.18, il est devenu possible de créer des structures de données génériques, telles que le type Any, qui peut représenter l’une des deux valeurs possibles. Cela résout la limitation du renvoi à la fois d'une valeur et d'une erreur, comme dans l'approche idiomatique Go pour la gestion des erreurs.

Une approche pour implémenter un type générique Any implique l'utilisation d'un type None et d'une interface facultative. None représente l'absence de valeur, tandis que Facultatif fournit un moyen de récupérer une valeur ou une erreur. De plus, les types Gauche et Droite sont définis pour représenter les deux valeurs possibles que l'un ou l'autre peut contenir.

type Optional[T any] interface {
    get() (T, error)
}

type None[T any] struct {}
type Some[T any] struct {
    data T
}
Copier après la connexion

L'interface L'un ou l'autre propose des méthodes pour déterminer si elle contient une valeur gauche ou droite, ainsi que des méthodes pour accéder aux deux types. de valeurs à l'aide des méthodes de recherche.

type Either[A, B any] interface {
    is_left() bool
    is_right() bool
    find_left() Optional[A]
    find_right() Optional[B]
}

type Left[A, B any] struct {
    data A
}
type Right[A, B any] struct {
    data B
}
Copier après la connexion

Des fonctions d'assistance sont fournies pour créer des instances de l'une ou l'autre et accéder à leurs valeurs.

func left[A, B any](data A) Either[A, B]
func right[A, B any](data B) Either[A, B]
Copier après la connexion

L'exemple suivant illustre le utilisation du type Soit :

var e1 Either[int, string] = left[int, string](4143)
var e2 Either[int, string] = right[int, string]("G4143")
fmt.Println(e1)
fmt.Println(e2)
Copier après la connexion

Le résultat sera :

left(4143)
right(G4143)
Copier après la connexion

En accédant aux méthodes is_left et is_right, il est possible de déterminer le type de valeur détenue par Soit. À l'aide des méthodes find_left et find_right, la valeur réelle peut être récupérée.

if e1.is_left() {
    if l, err := e1.find_left().get(); err == nil {
        fmt.Printf("The int is: %d\n", l)
    } else {
        fmt.Fprintln(os.Stderr, err)
    }
}
if e2.is_right() {
    if r, err := e2.find_right().get(); err == nil {
        fmt.Printf("The string is: %s\n", r)
    } else {
        fmt.Fprintln(os.Stderr, err)
    }
}
Copier après la connexion

Cet exemple montre comment le type Each peut être utilisé pour représenter et gérer différents types de valeurs de manière flexible et sécurisée.

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 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