Maison >développement back-end >Golang >Comment transmettre des tranches de chaîne aux paramètres variadiques d'interface vides ?

Comment transmettre des tranches de chaîne aux paramètres variadiques d'interface vides ?

DDD
DDDoriginal
2024-11-06 19:35:02764parcourir

How to Pass String Slices to Empty Interface Variadic Parameters?

Passer des tranches de chaîne à des paramètres variadiques d'interface vides

Passer une tranche de chaînes à un paramètre variadique d'interface vide pose un défi en raison de l'incapacité pour affecter directement la tranche au paramètre. Cela nécessite une copie fastidieuse avec des allocations multiples, ce qui en fait une solution inadaptée.

Approches alternatives :

  1. Fonction de conversion personnalisée : Créez une fonction qui accepte une tranche de chaîne et renvoie une tranche d'interface vide correspondante. Bien que cette méthode nécessite plusieurs implémentations pour différents types de tranches, elle offre une approche plus concise et réutilisable.
  2. Réflexion : Utilisez la réflexion pour créer une fonction générique qui convertit n'importe quel type de tranche en une interface vide. tranche. Cependant, cette méthode introduit une pénalité de performances d'exécution en raison de sa nature réfléchissante.

Exemple de code :

<code class="go">// Converts a string slice to an empty interface slice
func StringSliceToInterfaceSlice(values []string) []interface{} {
    var valuesInterface []interface{}
    for _, value := range values {
        valuesInterface = append(valuesInterface, value)
    }
    return valuesInterface
}

// Using reflection for generic slice conversion
func ReflectSliceToInterfaceSlice(slice reflect.Value) []interface{} {
    var valuesInterface []interface{}
    for i := 0; i < slice.Len(); i++ {
        valuesInterface = append(valuesInterface, slice.Index(i).Interface())
    }
    return valuesInterface
}</code>

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!

Déclaration:
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