97 votes

Quelle est la différence entre []string et ...string dans golang ?

Dans le langage Go,

[]string est un tableau de chaînes de caractères

et nous utilisons également ...string en tant que paramètre.

Quelle est la différence ?

Définition de la fonction :

func f(args ...string) {}

Puis-je appeler cette fonction comme ci-dessous ?

args := []string{"a", "b"}

f(args)

140voto

I Hate Lazy Points 18168

[]string est un tableau de chaînes de caractères

Techniquement, c'est une tranche qui fait référence à un tableau sous-jacent.

et nous utilisons également ...string en tant que paramètre.

Quelle est la différence ?

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

En ... La syntaxe du paramètre fait un paramètre variadique. Il accepte zéro ou plusieurs string et les référencer comme une tranche.

En ce qui concerne les appels f vous pouvez passer une tranche de chaînes de caractères dans le paramètre variadique avec la syntaxe suivante :

func f(args ...string) {
    fmt.Println(len(args))
}

args := []string{"a", "b"}

f(args...)

Cette syntaxe est disponible soit pour la tranche construite à l'aide de la syntaxe littérale, soit pour la tranche représentant le paramètre variadique. (puisqu'il n'y a pas vraiment de différence entre eux) .

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

15voto

tylerl Points 14541

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

func f(args ...string) {

}
// 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 est fmt.Print et amis, qui peuvent accepter autant d'arugments que vous le souhaitez.

6voto

Ertuğrul Points 59

Voici ce que vous voulez :

var args []string = []string{"A", "B", "C"}

func Sample(args ...string) {
    for _, arg := range args {
        fmt.Println(arg)
    }
}

func main() {
    Sample(args...)
}

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

2voto

Petre Sosa Points 633

Il simplifie les paramètres de vos fonctions. Voici un exemple( https://play.golang.org/p/euMuy6IvaM ) : La méthode SampleEllipsis accepte de zéro à plusieurs paramètres du même type mais dans la méthode SampleArray il est obligatoire. Arguments à déclarer.

package main

import "fmt"

func SampleEllipsis(args ...string) {
    fmt.Printf("Sample ellipsis : %+v\n",args)
}

func SampleArray(args []string) {
    fmt.Println("Sample array ")
    SampleEllipsis(args...)
}

func main() {
    // Method one
    SampleEllipsis([]string{"A", "B", "C"}...)
    // Method two
    SampleEllipsis("A", "B", "C")
    // Method three
    SampleEllipsis()

    // Simple array
    SampleArray([]string{"A", "B", "C"})

    // Simple array
    SampleArray([]string{})

}

Retours :

Sample ellipsis : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array 
Sample ellipsis : [A B C]
Sample array 
Sample ellipsis : []

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X