Quelle est la différence entre ssortingng et… ssortingng in golang?

en langue go

[]ssortingng est un tableau de chaînes

et nous utilisons aussi ...ssortingng comme paramètre

Quelle est la difference?

définition de fonction:

 func f(args ...ssortingng) {} 

et puis-je appeler cette fonction comme ci-dessous?

 args := []ssortingng{"a", "b"} f(args) 

[]ssortingng est un tableau de chaînes

Techniquement, c’est une tranche qui référence un tableau sous-jacent

et nous utilisons aussi ...ssortingng comme paramètre

Quelle est la difference?

En ce qui concerne la structure, rien de vraiment. Le type de données résultant des deux syntaxes est identique.

La syntaxe du paramètre ... fait un paramètre variadic. Il acceptera zéro ou plusieurs arguments de ssortingng et les référencera comme une tranche.

En ce qui concerne l’appel de f , vous pouvez passer une tranche de chaînes dans le paramètre variadic avec la syntaxe suivante:

 func f(args ...ssortingng) { fmt.Println(len(args)) } args := []ssortingng{"a", "b"} f(args...) 

Cette syntaxe est disponible pour la tranche créée à l’aide de la syntaxe littérale ou pour la tranche représentant le paramètre variadic (car il n’y a vraiment aucune différence entre elles) .

http://play.golang.org/p/QWmzgIWpF8

Les deux créent un tableau de chaînes, mais la différence réside dans la façon dont il est appelé.

 func f(args ...ssortingng) { } // Would be called like this: f("foo","bar","baz"); 

Cela vous permet d’accepter un nombre variable d’arguments (tous du même type)

Un bon exemple de ceci est fmt.Print et friends, qui peuvent accepter autant de ragments que vous le souhaitez.

Voici ce que vous voulez:

 var args []ssortingng = []ssortingng{"A", "B", "C"} func Sample(args ...ssortingng) { for _, arg := range args { fmt.Println(arg) } } func main() { Sample(args...) } 

Jouer: http://play.golang.org/p/N1ciDUKfG1

Cela simplifie vos parameters de fonction. Voici un exemple ( https://play.golang.org/p/euMuy6IvaM ): La méthode SampleEllipsis accepte de zéro à plusieurs parameters du même type mais dans la méthode SampleArray, il est obligatoire de déclarer des arguments.

 package main import "fmt" func SampleEllipsis(args ...ssortingng) { fmt.Printf("Sample ellipsis : %+v\n",args) } func SampleArray(args []ssortingng) { fmt.Println("Sample array ") SampleEllipsis(args...) } func main() { // Method one SampleEllipsis([]ssortingng{"A", "B", "C"}...) // Method two SampleEllipsis("A", "B", "C") // Method three SampleEllipsis() // Simple array SampleArray([]ssortingng{"A", "B", "C"}) // Simple array SampleArray([]ssortingng{}) } 

Résultats :

 Sample ellipsis : [ABC] Sample ellipsis : [ABC] Sample ellipsis : [] Sample array Sample ellipsis : [ABC] Sample array Sample ellipsis : []