Maison > développement back-end > Golang > Comment imiter les types de données génériques et algébriques sans support natif ?

Comment imiter les types de données génériques et algébriques sans support natif ?

Barbara Streisand
Libérer: 2024-12-13 07:58:09
original
516 Les gens l'ont consulté

How Can Go Mimic Generics and Algebraic Data Types Without Native Support?

Listes génériques dans Go sans génériques

Implémentation de listes génériques

Go ne prend pas en charge nativement les génériques, mais il offre un approche alternative utilisant un type d’interface vide appelé Any. Cette interface sert d'espace réservé pour tout type de données.

type Any interface{}
Copier après la connexion

Pour vérifier si une valeur Any est nulle, vous pouvez utiliser le package Reflect pour examiner son type sous-jacent.

if reflect.ValueOf(value).IsNil() {
    // Value is nil
}
Copier après la connexion

Conception de types de données algébriques

Les types de données algébriques, tels que l'exemple de type Haskell fourni, peuvent être implémenté dans Go à l'aide d'interfaces. Par exemple, pour représenter une liste chaînée :

type List[T Any] interface {
    Head() T
    Tail() List[T]
}

// Nil list
type Nil[T Any] struct{}

// Cons list
type Cons[T Any] struct {
    head T
    tail List[T]
}
Copier après la connexion

Conteneur pour objets avec des types de champs spécifiques

Go ne prend pas en charge les paramètres de type comme le fait Scala. Cependant, vous pouvez créer un type qui garantit la présence d'un 特定字段类型.

type Animal interface {
    SuitableFood() string
}

type GrassEatingAnimal struct {
    SuitableFood func() string
}
Copier après la connexion

Vous pouvez obtenir une fonctionnalité similaire en utilisant une carte générique :

type AnimalMap[K Comparable, V Animal] map[K]V
Copier après la connexion

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