Golang : Count number of runes in string
This just a note for myself and perhaps it can be useful to you as well.
To count a length(size) of a string, typically a programmer will just settle for the the builtin.Len() function. However, when dealing with strings with utf8 characters. Please use the utf8.RuneCountInString() function. See the code below to know why :
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
str := "abc"
fmt.Printf("Length %s with len() is %d\n", str, len(str)) // correct
unicodeStr := "fuß"
fmt.Printf("Length %s with len() is %d\n", unicodeStr, len(unicodeStr)) // incorrect
fmt.Printf("Length %s with utf8.RuneCountInString() is %d\n", unicodeStr, utf8.RuneCountInString(unicodeStr)) // correct
unicodeStr2 := "你好"
fmt.Printf("Length %s with len() is %d\n", unicodeStr2, len(unicodeStr2)) // incorrect
fmt.Printf("Length %s with utf8.RuneCountInString() is %d\n", unicodeStr2, utf8.RuneCountInString(unicodeStr2)) // correct
}
Output :
Length abc with len() is 3
Length fuß with len() is 4
Length fuß with utf8.RuneCountInString() is 3
Length 你好 with len() is 6
Length 你好 with utf8.RuneCountInString() is 2
See also : Golang : convert rune to integer value
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+19.9k Golang : How to get time from unix nano example
+5.9k Golang : Detect variable or constant type
+8.9k Golang : Find network service name from given port and protocol
+18k Golang : How to log each HTTP request to your web server?
+21.5k Golang : How to read float value from standard input ?
+17.1k Golang : Fix cannot convert buffer (type *bytes.Buffer) to type string error
+38.1k Golang : Read a text file and replace certain words
+4.1k Javascript : Empty an array example
+22k Fix "Failed to start php5-fpm.service: Unit php5-fpm.service is masked."
+12.7k Golang : Pass database connection to function called from another package and HTTP Handler
+6.2k Golang : Get Hokkien(福建话)/Min-nan(閩南語) Pronounciations
+4.3k Golang : Converting individual Jawi alphabet to Rumi(Romanized) alphabet example