Maison > développement back-end > Golang > Comment ajouter automatiquement de nouveaux éléments d'une tranche à un paramètre de fonction à mesure que la tranche grandit

Comment ajouter automatiquement de nouveaux éléments d'une tranche à un paramètre de fonction à mesure que la tranche grandit

王林
Libérer: 2024-02-15 18:00:11
avant
902 Les gens l'ont consulté

Comment ajouter automatiquement de nouveaux éléments dune tranche à un paramètre de fonction à mesure que la tranche grandit

L'éditeur PHP Xiaoxin partage une technique pratique, c'est-à-dire comment ajouter automatiquement de nouveaux éléments aux paramètres de fonction lorsque la tranche (Slice) grandit. Les tranches sont une structure de données flexible, mais peuvent présenter certains défis lorsqu'elles sont utilisées dans les paramètres de fonction. Cet article présentera une méthode concise pour ajouter automatiquement de nouveaux éléments aux paramètres de fonction à mesure que la tranche grandit en utilisant des paramètres variables (Arguments Variadiques) et l'opérateur de propagation (Opérateur Spread). Cette technique peut améliorer la lisibilité et la maintenabilité du code. Apprenons-le ensemble !

Contenu de la question

Y a-t-il un moyen d'automatiser cela ?

package main

import "fmt"

func main() {
    var a []string
    a = append(a, "this", "this2", "this3")
    increaseArguments(a)
    a = append(a, "this4")
    increaseArguments(a)

}

func increaseArguments(b []string) {
    // I want, when i add new element to slice i want this function act as this
    // fmt.Println(b[0],b[1], b[2], b[3])

    fmt.Println(b[0], b[1], b[2])

}
Copier après la connexion

Existe-t-il un moyen d'ajouter automatiquement b[3] comme argument à fmt.println ?

Solution

Veuillez noter que si b 的类型为 []any,您可以将其作为 fmt.println() :

fmt.println(b...)
Copier après la connexion

Mais à cause de b 的类型是 []string, tu ne peux pas.

Mais si vous tranchez b 转换为 []any, ça marche. Vous pouvez le faire en utilisant cette fonction d'assistance :

func convert[t any](x []t) []any {
    r := make([]any, len(x))
    for i, v := range x {
        r[i] = v
    }
    return r
}
Copier après la connexion

Puis :

func increasearguments(b []string) {
    fmt.println(convert(b)...)
}
Copier après la connexion

Cela affichera (essayez-le sur go terrain de jeu) :

this this2 this3
this this2 this3 this4
Copier après la connexion

Remarque : dans convert() 中创建一个新切片不会使该解决方案变慢,因为显式传递值(如 fmt.println(b[0], b[1], b[2]) ) crée implicitement une tranche.

Voir les questions associées : Comment transmettre la valeur d'une fonction variadique avec plusieurs valeurs de retour ?

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!

Étiquettes associées:
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