Como juntar uma fatia de strings em uma única string?

129
package main

import (
"fmt"
"strings"
)

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

dá-me um erro de:

prog.go: 10: não é possível usar reg (digite [3] string) como tipo [] string no argumento de strings.Join

Existe uma maneira mais direta / melhor do que fazer loop e adicionar a um var?

cycle4passion
fonte
2
Por que não usar apenas reg := []string {"a","b","c"}?
Sean M

Respostas:

100

O título da sua pergunta é:

Como juntar uma fatia de strings em uma única string?

mas, na verdade, nãoreg é uma fatia, mas uma matriz de comprimento e três. é apenas açúcar sintático para (neste caso) .[...]string[3]string

Para obter uma fatia real, você deve escrever:

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

(Experimente: https://play.golang.org/p/vqU5VtDilJ .)

Aliás, se você realmente precisar juntar uma matriz de cadeias em uma única cadeia, poderá obter uma fatia da matriz adicionando [:], da seguinte forma:

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

(Experimente: https://play.golang.org/p/zy8KyC8OTuJ .)

ruakh
fonte
7
Pls, forneça o código de trabalho na resposta em si, o playground é uma vantagem, mas não o suficiente para uma resposta aceitável ;-). TY!
shadyyx
8
@ shadyyx: Concordo que o link do playground é estritamente complementar; mas não sei ao certo o que você acha que falta na resposta correta. O único erro do OP foi na linha 10 e eu forneci a versão corrigida dessa linha, juntamente com a explicação. (Você está sugerindo que eu deveria ter copiado seu / sua inteira programa de exemplo para a resposta Se assim for, então? -. Eu discordo)
ruach
1
"tentando juntar uma fatia a uma cadeia" Sua solução funciona apenas para fatias de cadeias em vez do tipo geral de fatia.
Steven Roose
107

Use uma fatia, não uma matriz. Basta criá-lo usando

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

Uma alternativa seria converter sua matriz em uma fatia ao ingressar:

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

Leia o blog Go sobre as diferenças entre fatias e matrizes .

Denys Séguret
fonte
26

Isso ainda é relevante em 2018.

Para sequenciar

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

Voltar ao Slice novamente

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