Bagaimana cara menggabungkan sepotong string menjadi satu string?

130
package main

import (
"fmt"
"strings"
)

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

memberi saya kesalahan:

prog.go: 10: tidak dapat menggunakan reg (string tipe [3]) sebagai string tipe [] dalam argumen ke string.

Apakah ada cara yang lebih langsung / lebih baik daripada mengulang dan menambahkan ke var?

cycle4passion
sumber
2
Mengapa tidak digunakan saja reg := []string {"a","b","c"}?
Sean M

Jawaban:

101

Judul pertanyaan Anda adalah:

Bagaimana cara menggabungkan sepotong string menjadi satu string?

namun pada kenyataannya, regadalah tidak sepotong, tapi panjang-tiga larik. [...]stringhanyalah gula sintaksis untuk (dalam hal ini) [3]string.

Untuk mendapatkan potongan yang sebenarnya, Anda harus menulis:

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

(Coba ini: https://play.golang.org/p/vqU5VtDilJ .)

Kebetulan, jika Anda benar-benar perlu menggabungkan larik string menjadi satu string, Anda bisa mendapatkan potongan dari larik dengan menambahkan [:], seperti:

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

(Coba ini: https://play.golang.org/p/zy8KyC8OTuJ .)

ruakh
sumber
7
Tolong berikan kode kerja di jawaban itu sendiri, taman bermain adalah nilai tambah tetapi tidak cukup untuk jawaban yang dapat diterima ;-). TY!
shadyyx
8
@shadyyx: Saya setuju bahwa tautan taman bermain hanya bersifat tambahan; tapi saya tidak yakin apa yang menurut Anda hilang dari jawaban yang tepat. Satu-satunya kesalahan OP ada di baris 10, dan saya memberikan versi koreksi dari baris itu, bersama dengan penjelasannya. (Apakah Anda menyarankan agar saya menyalin seluruh contoh programnya ke dalam jawaban? Jika demikian, maka - saya tidak setuju.)
ruakh
1
"mencoba menggabungkan potongan menjadi string" Solusi Anda hanya berfungsi untuk potongan string, bukan jenis potongan umum.
Steven Roose
107

Gunakan slice, bukan array. Buat saja dengan menggunakan

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

Alternatifnya adalah mengonversi larik Anda menjadi irisan saat bergabung:

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

Baca blog Go tentang perbedaan antara slice dan array .

Denys Séguret
sumber
26

Ini masih relevan di 2018.

Untuk String

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

Kembali ke Slice lagi

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