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

Comment pouvez-vous réaliser une programmation générique pour des fonctions variadiques en Go sans modèles ni fonctions surchargées ?

Patricia Arquette
Libérer: 2024-10-27 01:56:03
original
748 Les gens l'ont consulté

How Can You Achieve Generic Programming for Variadic Functions in Go Without Templates or Overloaded Functions?

Arguments variadiques génériques dans Go

Malgré le manque de modèles et de fonctions surchargées de Go, il est possible de réaliser une certaine forme de programmation générique pour les fonctions variadiques.

Problème de code de fonction redondant

Comme illustré dans les extraits de code fournis, de nombreuses fonctions partagent une logique similaire mais gèrent des types différents. Cette répétition peut conduire à du code redondant.

Solution : Type d'interface{}

Une approche pour réduire la redondance consiste à utiliser le type d'interface{} de Go, un type spécial compatible avec tous les types. En modifiant les fonctions pour accepter et renvoyer les valeurs de l'interface{}, la logique commune peut être centralisée.

<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

Code client

Dans le code client, la fonction Get peut être utilisé pour récupérer des valeurs de types spécifiques :

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

ou gérer explicitement la vérification de type :

<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

Inconvénients et alternatives

Alors que le L'approche interface{} réduit la redondance du code, elle introduit une surcharge d'exécution. Une meilleure solution pourrait impliquer de refactoriser le code pour éliminer le besoin de logique répétitive.

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!