Maison > développement back-end > Golang > le corps du texte

Comment réaliser une programmation générique pour les fonctions variadiques dans Go ?

Susan Sarandon
Libérer: 2024-10-28 07:47:30
original
345 Les gens l'ont consulté

How to Achieve Generic Programming for Variadic Functions in Go?

Programmation générique pour les fonctions variadiques dans Go

Malgré le manque de modèles et de fonctions surchargées de Go, il est toujours possible d'implémenter une certaine forme de programmation générique pour les fonctions variadiques.

Considérons l'exemple suivant avec une série de fonctions qui récupèrent des valeurs d'une base de données et renvoient une valeur par défaut si la valeur demandée est manquante :

<code class="go">func (this Document) GetString(name string, defaults ...string) string {
    v, ok := this.GetValueFromDb(name)
    if !ok {
        if len(defaults) >= 1 {
            return defaults[0]
        } else {
            return ""
        }
    }
    return v.asString
}

func (this Document) GetInt(name string, defaults ...int) int {
    v, ok := this.GetValueFromDb(name)
    if !ok {
        if len(defaults) >= 1 {
            return defaults[0]
        } else {
            return 0
        }
    }
    return v.asInt
}</code>
Copier après la connexion

Pour éliminer le code redondance, on peut implémenter une fonction générique Get() en utilisant le type interface{} :

<code class="go">func (this Document) Get(name string, defaults ...interface{}) interface{} {
    v, ok := this.GetValueFromDb(name)
    if !ok {
        if len(defaults) >= 1 {
            return defaults[0]
        } else {
            return 0
        }
    }
    return v
}</code>
Copier après la connexion

Dans le code client, les valeurs renvoyées peuvent être typées en conséquence :

<code class="go">value := document.Get("index", 1).(int)  // Panics when the value is not int

value, ok := document.Get("index", 1).(int)  // ok is false if the value is not int</code>
Copier après la connexion

Cependant , cette approche introduit une certaine surcharge d'exécution en raison de la conversion de type. Il est toujours conseillé d'envisager de refactoriser le code ou d'utiliser des fonctions distinctes pour différents types.

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