Làm thế nào để nối một lát dây thành một chuỗi?


129
package main

import (
"fmt"
"strings"
)

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

cho tôi một lỗi về:

prog.go: 10: không thể sử dụng chuỗi reg (loại [3]) làm kiểu chuỗi [] trong đối số cho chuỗi.Join

Có cách nào trực tiếp / tốt hơn so với việc lặp và thêm vào một var không?


2
Tại sao không chỉ sử dụng reg := []string {"a","b","c"}?
Sean M

Câu trả lời:


99

Tiêu đề của câu hỏi của bạn là:

Làm thế nào để nối một lát dây thành một chuỗi?

nhưng trên thực tế, regkhông một lát, nhưng một mảng dài ba. [...]stringchỉ là cú pháp đường cho (trong trường hợp này)[3]string .

Để có được một lát cắt thực tế, bạn nên viết:

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

(Dùng thử: https://play.golang.org/p/vqU5VtDilJ .)

Ngẫu nhiên, nếu bạn thực sự cần phải nối một chuỗi các chuỗi thành một chuỗi, bạn có thể lấy một lát từ mảng bằng cách thêm [:], như vậy:

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

(Dùng thử: https://play.golang.org/p/zy8KyC8OTuJ .)


7
Xin vui lòng, cung cấp mã làm việc trong chính câu trả lời, sân chơi là một điểm cộng nhưng không đủ cho câu trả lời chấp nhận được ;-). TY!
shadyyx

8
@shadyyx: Tôi đồng ý rằng liên kết sân chơi là bổ sung nghiêm ngặt; nhưng tôi không chắc những gì bạn nghĩ là thiếu từ câu trả lời thích hợp. Lỗi duy nhất của OP là ở dòng 10 và tôi đã cung cấp phiên bản sửa lỗi của dòng đó, cùng với lời giải thích. (Bạn có gợi ý rằng tôi nên sao chép toàn bộ chương trình ví dụ của anh ấy / cô ấy vào câu trả lời không? Nếu vậy, thì - tôi không đồng ý.)
ruakh

1
"Cố gắng nối một lát thành một chuỗi" Giải pháp của bạn chỉ hoạt động đối với các lát chuỗi thay vì loại lát chung.
Steven Roose


26

Điều này vẫn còn có liên quan trong năm 2018.

Để chuỗi

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

Quay lại lát

import strings
fileSlice := strings.Split(stringFiles, ",")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.