Golang ProgramsGolang Programs

Golang program to print all Permutations of a given string

A permutation, is a rearrangement of the elements of an ordered list S into a one-to-one correspondence with S itself. A string of length n has n! permutation. Let's take an example of "ABCD" and write a program to generate all possible permutation and combinations of string in Golang.
// Permutation Generator in Golang
package main
 
import (
    "fmt"	
)   
 func join(ins []rune, c rune) (result []string) {
    for i := 0; i <= len(ins); i++ {
        result = append(result, string(ins[:i])+string(c)+string(ins[i:]))
    }
    return
}
 
func permutations(testStr string) []string {
    var n func(testStr []rune, p []string) []string
    n = func(testStr []rune, p []string) []string{
        if len(testStr) == 0 {
            return p
        }else {
            result := []string{}
            for _, e := range p {
                result = append(result, join([]rune(e), testStr[0])...)
            }
            return n(testStr[1:], result)
        }
    }
 
    output := []rune(testStr)
    return n(output[1:], []string{string(output[0])})
}
 
func main() {   
    d := permutations("ABCD")
    fmt.Print(d)
}
C:\golang\example>go run test.go
[DCBA CDBA CBDA CBAD DBCA BDCA BCDA BCAD DBAC BDAC BADC BACD DCAB CDAB CADB CABD DACB ADCB ACDB ACBD DABC ADBC ABDC ABCD]
C:\golang\example>