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

Comment réaliser des fonctions variadiques génériques sans modèles ?

Linda Hamilton
Libérer: 2024-10-26 20:09:02
original
156 Les gens l'ont consulté

 How Can Go Achieve Generic Variadic Functions Without Templates?

Argumentation variadique générique dans Go

Go manque de modèles et de fonctions surchargées, mais il offre une solution pour atteindre un semblant de programmation générique en variadique fonctions.

Défi :

De nombreuses fonctions ayant des structures similaires, telles que :

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

// etc. for various types</code>
Copier après la connexion

Solution :

L'utilisation du type interface{} active une fonction générique :

<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 nil
        }
    }
    return v
}</code>
Copier après la connexion

La fonction GetValueFromDb doit également renvoyer une interface{}. Dans le code client, les valeurs peuvent être converties et obtenues à l'aide de l'assertion de type :

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

ou

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

Bien que cela entraîne une certaine surcharge d'exécution, la restructuration du code et la séparation des fonctions peuvent être plus efficaces. .

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!