According to the answer at How to split a string and assign it to variables in Golang? splitting a string results in an array of strings where the separator is not present i
Try this to get the proper result.
package main
import (
"fmt"
"strings"
)
func main() {
str := "Potato:Salad:Popcorn:Cheese"
a := strings.SplitAfter(str, ":")
for i := 0; i < len(a); i++ {
fmt.Println(a[i])
}
}
The answer above by daplho great and simple. Sometimes I just like to provide an alternative to remove the magic of a function
package main
import "fmt"
var s = "Potato:Salad:Popcorn:Cheese"
func main() {
a := split(s, ':')
fmt.Println(a)
}
func split(s string, sep rune) []string {
var a []string
var j int
for i, r := range s {
if r == sep {
a = append(a, s[j:i+1])
j = i + 1
}
}
a = append(a, s[j:])
return a
}
https://goplay.space/#h9sDd1gjjZw
As a side note, the standard lib version is better than the hasty one above
goos: darwin
goarch: amd64
BenchmarkSplit-4 5000000 339 ns/op
BenchmarkSplitAfter-4 10000000 143 ns/op
So go with that lol
You are looking for SplitAfter.
s := strings.SplitAfter("Potato:Salad:Popcorn:Cheese", ":")
for _, element := range s {
fmt.Println(element)
}
// Potato:
// Salad:
// Popcorn:
// Cheese
Go Playground