Comment joindre une tranche de chaînes en une seule chaîne?

130
package main

import (
"fmt"
"strings"
)

func main() {
reg := [...]string {"a","b","c"}
fmt.Println(strings.Join(reg,","))
}

me donne une erreur de:

prog.go: 10: impossible d'utiliser reg (chaîne de type [3]) comme chaîne de type [] dans l'argument des chaînes.

Existe-t-il un moyen plus direct / meilleur que de boucler et d'ajouter à une variable?

cycle4passion
la source
2
Pourquoi ne pas simplement utiliser reg := []string {"a","b","c"}?
Sean M

Réponses:

101

Le titre de votre question est:

Comment joindre une tranche de chaînes en une seule chaîne?

mais en fait, ce regn'est pas une tranche, mais un tableau de longueur trois. [...]stringest juste du sucre syntaxique pour (dans ce cas) [3]string.

Pour obtenir une tranche réelle, vous devez écrire:

reg := []string {"a","b","c"}

(Essayez-le: https://play.golang.org/p/vqU5VtDilJ .)

Incidemment, si jamais vous avez vraiment besoin de joindre un tableau de chaînes en une seule chaîne, vous pouvez obtenir une tranche du tableau en ajoutant [:], comme ceci:

fmt.Println(strings.Join(reg[:], ","))

(Essayez-le: https://play.golang.org/p/zy8KyC8OTuJ .)

Ruakh
la source
7
Veuillez fournir le code de travail dans la réponse elle-même, le terrain de jeu est un plus mais pas suffisant pour une réponse acceptable ;-). TY!
shadyyx
8
@shadyyx: Je suis d'accord que le lien du terrain de jeu est strictement complémentaire; mais je ne suis pas sûr de ce que vous pensez qu'il manque dans la réponse proprement dite. La seule erreur du PO était à la ligne 10, et j'ai fourni la version corrigée de cette ligne, accompagnée d'une explication. (Êtes-vous en train de suggérer que j'aurais dû copier l'intégralité de son programme d'exemple dans la réponse? Si oui, alors - je ne suis pas d'accord.)
ruakh
1
"essayer de joindre une tranche dans une chaîne" Votre solution ne fonctionne que pour les tranches de chaînes au lieu du type de tranche général.
Steven Roose
107

Utilisez une tranche, pas un arrray. Créez-le simplement en utilisant

reg := []string {"a","b","c"}

Une alternative aurait été de convertir votre tableau en une tranche lors de la jonction:

fmt.Println(strings.Join(reg[:],","))

Lisez le blog Go sur les différences entre les tranches et les tableaux .

Denys Séguret
la source
26

Cela est toujours d'actualité en 2018.

To String

import strings
stringFiles := strings.Join(fileSlice[:], ",")

De nouveau à Slice

import strings
fileSlice := strings.Split(stringFiles, ",")
Edwinner
la source