226
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?

ruakh
  • 175,680
  • 26
  • 273
  • 307
cycle4passion
  • 3,081
  • 3
  • 14
  • 28

3 Answers3

258

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"}

(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.)

ruakh
  • 175,680
  • 26
  • 273
  • 307
  • 11
    Pls, provide the working code in the answer itself, playground is a plus but not enough for acceptable answer ;-). TY! – shadyyx Mar 01 '16 at 15:11
  • 13
    @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.) – ruakh Mar 01 '16 at 16:24
  • 1
    "trying to join a slice into a string" Your solution only works for **slices of strings** instead of the general slice type. – Steven Roose Sep 25 '17 at 08:05
127

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.

Denys Séguret
  • 372,613
  • 87
  • 782
  • 758
44

This is still relevant in 2018.

To String

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

Back to Slice again

import strings
fileSlice := strings.Split(stringFiles, ",")
Edwinner
  • 2,458
  • 1
  • 22
  • 33