Bien que Go ne fournisse pas de support inhérent pour la programmation générique ou la surcharge de fonctions, il permet un certain niveau de flexibilité lorsqu'il s'agit de gérer des fonctions variadiques. fonctions.
Considérez le scénario courant dans lequel vous disposez de plusieurs fonctions comme le suivant :
<code class="go">func (this Document) GetString(name string, defaults ...string) string { // ... Function implementation } func (this Document) GetInt(name string, defaults ...int) int { // ... Function implementation }</code>
Vous pouvez rencontrer une duplication de code dans ces fonctions. Existe-t-il un moyen de minimiser cette redondance ?
Oui, même si Go ne dispose pas de modèles génériques, vous pouvez exploiter l'interface{} pour fournir une solution générique.
<code class="go">func (this Document) Get(name string, defaults ...interface{}) interface{} { // ... Function implementation // This function returns `interface{}` instead of specific types. }</code>
Cette approche vous permet d'interagir avec la fonction de la manière suivante :
<code class="go">value := document.Get("index", 1).(int) // Type casting is required</code>
Si vous préférez les valeurs nulles, vous pouvez utiliser cette approche :
<code class="go">value, ok := document.Get("index", 1).(int) // Returns `ok` to indicate type compatibility</code>
Cependant, cette approche peut entraîner une surcharge d'exécution. Il est conseillé d'évaluer la structure de votre code et de déterminer si des fonctions distinctes ou une solution différente sont plus adaptées à vos besoins spécifiques.
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!