Reverse
string
Sometimes in programs we want to reverse the characters in a string
. This can generate a key from existing data. A string
cannot be directly sorted.
Instead, we must act on the string
at the level of its runes or bytes. Runes in Go are most similar to characters. We can convert strings to rune
slices and then reverse those.
func
Let us start. Here we introduce the reverse()
method. This method receives a string
and returns another string
. We begin by converting the string
argument to a slice of runes.
byte
. Runes support 2-byte
characters. Logically a rune
is a character.for
-loop, with a decrementing iteration, to access our slice of runes. We build up a slice of the runes in reverse order.func
returns a string
based on the reversed contents of the rune
slice. We just use runes internally to process the string
.package main import "fmt" func reverse(value string) string { // Convert string to rune slice. // ... This method works on the level of runes, not bytes. data := []rune(value) result := []rune{} // Add runes in reverse order. for i := len(data) - 1; i >= 0; i-- { result = append(result, data[i]) } // Return new string. return string(result) } func main() { // Test our method. value1 := "cat" reversed1 := reverse(value1) fmt.Println(value1) fmt.Println(reversed1) value2 := "abcde" reversed2 := reverse(value2) fmt.Println(value2) fmt.Println(reversed2) }cat tac abcde edcba
In Go, we can access the bytes of a string
instead of converting the string
to a rune
slice. And we can reverse these bytes.
string
with 2-byte
chars, runes will preserve the data. Accessing bytes will meanwhile cause some corruption.string
reversal, keeping the data correct is probably more important than max performance.Strings can be manipulated in many ways by first converting them to rune
slices. We can reorder or modify runes. This is powerful, versatile, and can be used to reverse strings.