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

Comment définir une fonction générique à l'aide d'une structure personnalisée sans lister toutes les structures ?

PHPz
Libérer: 2024-02-09 20:30:10
avant
767 Les gens l'ont consulté

Comment définir une fonction générique à laide dune structure personnalisée sans lister toutes les structures ?

En PHP, si l'on souhaite utiliser des structures personnalisées pour définir des fonctions communes sans avoir à lister toutes les structures, il existe un moyen efficace de le faire. Cette approche est réalisée en utilisant un nombre variable de paramètres. Nous pouvons accepter n'importe quel nombre de paramètres en utilisant des points de suspension (...) comme noms de paramètres dans la définition de la fonction. Dans le corps de la fonction, nous pouvons utiliser la fonction func_get_args() pour obtenir tous les arguments transmis à la fonction. De cette façon, nous pouvons utiliser ces paramètres à l’intérieur de la fonction sans définir toutes les structures à l’avance. Cette approche flexible peut nous aider à écrire des fonctions plus générales et réutilisables et à améliorer l'efficacité du codage.

Contenu de la question

Supposons que j'ai deux structures différentes :

type one struct {
  id string
  // other fields
}

type two struct {
  id string
  // other fields
}
Copier après la connexion

Est-il possible de définir une fonction qui accepte les deux onetwo sans les lister explicitement comme options ?

Par exemple, je recherche quelque chose comme ceci :

type ModelWithId struct {
  Id string
}

func Test[M ModelWithId](m M) {
  fmt.PrintLn(m.Id)
}

one := One { Id: "1" }
Test(one) // Prints 1
Copier après la connexion

Je ne veux pas utiliser functest[m one |两个](m m) parce que je pourrais avoir plus de 10 structures et je ne veux pas avoir à revenir à cette fonction à chaque fois que j'ajoute une nouvelle structure à la base de code.

Solution

Les génériques utilisent des méthodes pour contraindre le comportement des paramètres de type, vous devez donc réécrire votre code comme :

type one struct {
    id string
}

func (o *one) id() string {
    return o.id
}
Copier après la connexion

Alors votre site d'utilisation deviendra :

type ModelWithId interface {
    Id() string
}

func Test[M ModelWithId](m M) {
    fmt.Println(m.Id())
}
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:stackoverflow.com
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
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!