A field is separated by one or more space characters. The Fields()
method in the strings package separates these into an array. It splits on groups of spaces.
With Fields, we treat many consecutive delimiter characters as one. So several spaces is the same as a single space. This is a key advantage of Fields over Split()
.
Here is a basic example of Fields. Please notice how the words in the value string
are separated by spaces, but two or spaces may be used to separate a word.
package main import ( "fmt" "strings" ) func main() { value := "Cat Dog Bird Fish" result := strings.Fields(value) // Display all fields, first field and count. fmt.Println(result) fmt.Println(result[0]) fmt.Println(len(result)) }[Cat Dog Bird Fish] Cat 4
FieldsFunc
This method allows us to specify the field separator as a func
. The fund must receive a rune
and return a bool
(whether the char
is a separator).
FieldsFunc
, we get the same functionality as Fields()
but are not restricted to using a space separator.package main import ( "fmt" "strings" ) func main() { // Return true if comma or colon char. f := func(c rune) bool { return c == ',' || c == ':' } // Separate into fields with func. fields := strings.FieldsFunc("cat,dog:bird", f) fmt.Println(fields) }[cat dog bird]
Fields and FieldsFunc
are helpful when parsing strings that use a single delimiter character (and perhaps several in a sequence). More complex delimiters cannot be used.