Wie füge ich ein Stück Strings zu einem einzigen String zusammen?

129
package main

import (
"fmt"
"strings"
)

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

gibt mir einen Fehler von:

prog.go: 10: reg (Typ [3] Zeichenfolge) kann nicht als Typ [] Zeichenfolge im Argument für strings.Join verwendet werden

Gibt es einen direkteren / besseren Weg als das Schleifen und Hinzufügen zu einer Var?

cycle4passion
quelle
2
Warum nicht einfach benutzen reg := []string {"a","b","c"}?
Sean M

Antworten:

99

Der Titel Ihrer Frage lautet:

Wie füge ich ein Stück Strings zu einem einzigen String zusammen?

Tatsächlich reghandelt es sich jedoch nicht um ein Slice, sondern um ein Array mit der Länge drei. [...]stringist nur syntaktischer Zucker für (in diesem Fall)[3]string .

Um ein tatsächliches Slice zu erhalten, sollten Sie schreiben:

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

(Probieren Sie es aus: https://play.golang.org/p/vqU5VtDilJ .)

Übrigens, wenn Sie jemals wirklich ein Array von Zeichenfolgen zu einer einzelnen Zeichenfolge zusammenfügen müssen, können Sie ein Slice aus dem Array abrufen [:], indem Sie Folgendes hinzufügen :

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

(Probieren Sie es aus: https://play.golang.org/p/zy8KyC8OTuJ .)

Ruakh
quelle
7
Bitte geben Sie den Arbeitscode in der Antwort selbst an, Spielplatz ist ein Plus, aber nicht genug für eine akzeptable Antwort ;-). TY!
Shadyyx
8
@shadyyx: Ich stimme zu, dass der Spielplatz-Link streng ergänzend ist. aber ich bin nicht sicher, was Ihrer Meinung nach in der richtigen Antwort fehlt. Der einzige Fehler des OP war in Zeile 10, und ich habe die korrigierte Version dieser Zeile zusammen mit einer Erklärung bereitgestellt. (Schlagen Sie vor, dass ich sein gesamtes Beispielprogramm in die Antwort hätte kopieren sollen? Wenn ja, dann - ich bin anderer Meinung.)
Ruakh
1
"Versuch, ein Slice zu einem String zu verbinden" Ihre Lösung funktioniert nur für Slices von Strings anstelle des allgemeinen Slice-Typs.
Steven Roose
107

Verwenden Sie eine Scheibe, keine Arrray. Erstellen Sie es einfach mit

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

Eine Alternative wäre gewesen, Ihr Array beim Verbinden in ein Slice zu konvertieren:

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

Lesen Sie den Go-Blog über die Unterschiede zwischen Slices und Arrays .

Denys Séguret
quelle
26

Dies ist auch 2018 noch relevant.

Zu String

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

Wieder zurück zu Slice

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