245
package main

import (
"fmt"
"strings"
)

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

gives me an error of:

prog.go:10: cannot use reg (type [3]string) as type []string in argument to strings.Join

Is there a more direct/better way than looping and adding to a var?

0

3 Answers 3

288

The title of your question is:

How to join a slice of strings into a single string?

but in fact, reg is not a slice, but a length-three array. [...]string is just syntactic sugar for (in this case) [3]string.

To get an actual slice, you should write:

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

and then you'll find that your code for joining it works perfectly:

fmt.Println(strings.Join(reg, ","))

(Try it out: https://play.golang.org/p/vqU5VtDilJ.)

Incidentally, if you ever really do need to join an array of strings into a single string, you can get a slice from the array by adding [:], like so:

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

(Try it out: https://play.golang.org/p/zy8KyC8OTuJ.)

Sign up to request clarification or add additional context in comments.

3 Comments

Pls, provide the working code in the answer itself, playground is a plus but not enough for acceptable answer ;-). TY!
@shadyyx: I agree that the playground link is strictly supplemental; but I'm not sure what you think is missing from the answer proper. The OP's sole error was on line 10, and I provided the corrected version of that line, together with explanation. (Are you suggesting that I should have copied his/her entire example program into the answer? If so, then -- I disagree.)
"trying to join a slice into a string" Your solution only works for slices of strings instead of the general slice type.
131

Use a slice, not an arrray. Just create it using

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

An alternative would have been to convert your array to a slice when joining :

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

Read the Go blog about the differences between slices and arrays.

Comments

46

This is still relevant in 2018.

To String

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

Back to Slice again

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.