Come unire una fetta di stringhe in una singola stringa?


130
package main

import (
"fmt"
"strings"
)

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

mi dà un errore di:

prog.go: 10: non è possibile utilizzare reg (tipo [3] stringa) come tipo [] stringa nell'argomento delle stringhe.

Esiste un modo più diretto / migliore rispetto al loop e all'aggiunta a una var?


2
Perché non basta usare reg := []string {"a","b","c"}?
Sean M

Risposte:


101

Il titolo della tua domanda è:

Come unire una fetta di stringhe in una singola stringa?

ma in realtà, nonreg è uno slice, ma un array di lunghezza tre. è solo zucchero sintattico per (in questo caso) .[...]string[3]string

Per ottenere una fetta effettiva, dovresti scrivere:

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

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

Per inciso, se hai davvero bisogno di unire un array di stringhe in una singola stringa, puoi ottenere una fetta dall'array aggiungendo [:], in questo modo:

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

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


7
Per favore, fornisci il codice funzionante nella risposta stessa, il parco giochi è un vantaggio ma non abbastanza per una risposta accettabile ;-). TY!
shadyyx

8
@shadyyx: sono d'accordo che il link al playground è strettamente supplementare; ma non sono sicuro di cosa pensi manchi dalla risposta corretta. L'unico errore dell'OP era sulla riga 10 e ho fornito la versione corretta di quella riga, insieme alla spiegazione. (Stai suggerendo che avrei dovuto copiare il suo intero programma di esempio nella risposta? Se è così, allora - non sono d'accordo.)
ruakh

1
"tentativo di unire una sezione in una stringa" La tua soluzione funziona solo per sezioni di stringhe invece del tipo di sezione generale.
Steven Roose


26

Questo è ancora rilevante nel 2018.

Accordare

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

Torna di nuovo a Slice

import strings
fileSlice := strings.Split(stringFiles, ",")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.