Jak połączyć kawałek strun w jeden ciąg?

129
package main

import (
"fmt"
"strings"
)

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

daje mi błąd:

prog.go: 10: nie można użyć reg (typ [3] string) jako typu [] string w argumencie do strings.Join

Czy jest bardziej bezpośredni / lepszy sposób niż zapętlanie i dodawanie do zmiennej?

cycle4passion
źródło
2
Dlaczego po prostu nie użyć reg := []string {"a","b","c"}?
Sean M

Odpowiedzi:

100

Tytuł Twojego pytania to:

Jak połączyć kawałek strun w jeden ciąg?

lecz w rzeczywistości regto nie plaster, ale długość trzy tablicą. [...]stringjest po prostu cukrem syntaktycznym (w tym przypadku) [3]string.

Aby uzyskać rzeczywisty kawałek, powinieneś napisać:

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

(Wypróbuj: https://play.golang.org/p/vqU5VtDilJ .)

Nawiasem mówiąc, jeśli kiedykolwiek naprawdę będziesz musiał połączyć tablicę ciągów w jeden ciąg, możesz uzyskać wycinek z tablicy, dodając [:], na przykład:

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

(Wypróbuj: https://play.golang.org/p/zy8KyC8OTuJ .)

ruakh
źródło
7
Pls, podaj działający kod w samej odpowiedzi, plac zabaw to plus, ale to za mało, aby odpowiedzieć ;-). TY!
shadyyx
8
@shadyyx: Zgadzam się, że link do placu zabaw ma charakter wyłącznie uzupełniający; ale nie jestem pewien, czego Twoim zdaniem brakuje w właściwej odpowiedzi. Jedyny błąd PO wystąpił w linii 10 i dostarczyłem poprawioną wersję tej linii wraz z wyjaśnieniem. (Czy sugerujesz, że powinienem był skopiować jego / jej cały przykładowy program do odpowiedzi? Jeśli tak, to - nie zgadzam się.)
ruakh
1
„próbuje połączyć plasterek w łańcuch” Twoje rozwiązanie działa tylko dla kawałków łańcuchów zamiast ogólnego typu plasterków.
Steven Roose
107

Użyj plastra, a nie tablicy. Po prostu utwórz go za pomocą

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

Alternatywą byłoby przekonwertowanie tablicy na plasterek podczas łączenia:

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

Przeczytaj blog Go o różnicach między wycinkami i tablicami .

Denys Séguret
źródło
26

Jest to nadal aktualne w 2018 roku.

Do sznurka

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

Wróćmy do Slice ponownie

import strings
fileSlice := strings.Split(stringFiles, ",")
Edwinner
źródło