Как соединить кусок строки в одну строку?


130
package main

import (
"fmt"
"strings"
)

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

дает мне ошибку:

prog.go: 10: нельзя использовать reg (строка типа [3]) в качестве строки типа [] в аргументе строки.

Есть ли более прямой / лучший способ, чем цикл и добавление в var?


2
Почему бы просто не использовать reg := []string {"a","b","c"}?
Шон М.

Ответы:


101

Заголовок вашего вопроса:

Как соединить кусок строки в одну строку?

но на самом деле regэто не срез, а массив длиной три. [...]stringпросто синтаксический сахар для (в данном случае) [3]string.

Чтобы получить настоящий срез, вы должны написать:

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

(Попробуйте: https://play.golang.org/p/vqU5VtDilJ .)

Между прочим, если вам когда-либо действительно понадобится объединить массив строк в одну строку, вы можете получить фрагмент из массива, добавив [:], например, так:

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

(Попробуйте: https://play.golang.org/p/zy8KyC8OTuJ .)


7
Пожалуйста, укажите рабочий код в самом ответе, игровая площадка - это плюс, но этого недостаточно для приемлемого ответа ;-). TY!
shadyyx 01

8
@shadyyx: Я согласен с тем, что ссылка на игровую площадку является исключительно дополнительной; но я не уверен, чего, по вашему мнению, не хватает в собственном ответе. Единственная ошибка OP была в строке 10, и я предоставил исправленную версию этой строки вместе с объяснением. (Вы предлагаете, чтобы я скопировал его / ее пример программы в ответ? Если да, то я не согласен.)
ruakh 01

1
«попытка объединить фрагмент в строку» Ваше решение работает только для фрагментов строк, а не для общего типа фрагмента.
Стивен Руз


26

Это по-прежнему актуально в 2018 году.

Нанизывать

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

Вернуться к Slice снова

import strings
fileSlice := strings.Split(stringFiles, ",")
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.