Go string handling overview [cheat sheet]
yourbasic.org/golang
String literals (escape characters)
Expression |
Result |
Note |
"" |
|
Default zero value for type string |
"Japan 日本" |
Japan 日本 |
Go code is Unicode text encoded in UTF‑8 |
"\xe6\x97\xa5" |
日 |
\xNN specifies a byte |
"\u65E5" |
日 |
\uNNNN specifies a Unicode value |
"\\" |
\ |
Backslash |
"\"" |
" |
Double quote |
"\n" |
|
Newline |
"\t" |
|
Tab |
`\xe6` |
\xe6 |
Raw string literal* |
html.EscapeString("<>") |
<> |
HTML escape for <, >, &, ' and " |
url.PathEscape("A B") |
A%20B |
URL percent-encoding net/url |
* In ``
string literals, text is interpreted literally and
backslashes have no special meaning.
See Escapes and multiline strings for more on raw strings, escape characters and string encodings.
Concatenate
Expression |
Result |
Note |
"Ja" + "pan" |
Japan |
Concatenation |
Performance tips
See 3 tips for efficient string concatenation
for how to best use a string builder to concatenate strings without redundant copying.
Equal and compare (ignore case)
Expression |
Result |
Note |
"Japan" == "Japan" |
true |
Equality |
strings.EqualFold("Japan", "JAPAN") |
true |
Unicode case folding |
"Japan" < "japan" |
true |
Lexicographic order |
Length in bytes or runes
Expression |
Result |
Note |
len("日") |
3 |
Length in bytes |
utf8.RuneCountInString("日") |
1 |
in runes unicode/utf8 |
utf8.ValidString("日") |
true |
UTF-8? unicode/utf8 |
Index, substring, iterate
Expression |
Result |
Note |
"Japan"[2] |
'p' |
Byte at position 2 |
"Japan"[1:3] |
ap |
Byte indexing |
"Japan"[:2] |
Ja |
|
"Japan"[2:] |
pan |
|
A Go range loop iterates over UTF-8 encoded characters (runes):
for i, ch := range "Japan 日本" {
fmt.Printf("%d:%q ", i, ch)
}
Iterating over bytes produces nonsense characters for non-ASCII text:
s := "Japan 日本"
for i := 0; i < len(s); i++ {
fmt.Printf("%q ", s[i])
}
Search (contains, prefix/suffix, index)
Expression |
Result |
Note |
strings.Contains("Japan", "abc") |
false |
Is abc in Japan? |
strings.ContainsAny("Japan", "abc") |
true |
Is a, b or c in Japan? |
strings.Count("Banana", "ana") |
1 |
Non-overlapping instances of ana |
strings.HasPrefix("Japan", "Ja") |
true |
Does Japan start with Ja? |
strings.HasSuffix("Japan", "pan") |
true |
Does Japan end with pan? |
strings.Index("Japan", "abc") |
-1 |
Index of first abc |
strings.IndexAny("Japan", "abc") |
1 |
a, b or c |
strings.LastIndex("Japan", "abc") |
-1 |
Index of last abc |
strings.LastIndexAny("Japan", "abc") |
3 |
a, b or c |
Replace (uppercase/lowercase, trim)
Expression |
Result |
Note |
strings.Replace("foo", "o", ".", 2) |
f.. |
Replace first two “o” with “.” Use -1 to replace all |
f := func(r rune) rune { return r + 1 } strings.Map(f, "ab") |
bc |
Apply function to each character |
strings.ToUpper("Japan") |
JAPAN |
Uppercase |
strings.ToLower("Japan") |
japan |
Lowercase |
strings.Title("ja pan") |
Ja Pan |
Initial letters to uppercase |
strings.TrimSpace(" foo\n") |
foo |
Strip leading and trailing white space |
strings.Trim("foo", "fo") |
|
Strip leading and trailing f:s and o:s |
strings.TrimLeft("foo", "f") |
oo |
only leading |
strings.TrimRight("foo", "o") |
f |
only trailing |
strings.TrimPrefix("foo", "fo") |
o |
|
strings.TrimSuffix("foo", "o") |
fo |
|
Split by space or comma
Expression |
Result |
Note |
strings.Fields(" a\t b\n") |
["a" "b"] |
Remove white space |
strings.Split("a,b", ",") |
["a" "b"] |
Remove separator |
strings.SplitAfter("a,b", ",") |
["a," "b"] |
Keep separator |
Join strings with separator
Expression |
Result |
Note |
strings.Join([]string{"a", "b"}, ":") |
a:b |
Add separator |
strings.Repeat("da", 2) |
dada |
2 copies of “da” |
Expression |
Result |
Note |
strconv.Itoa(-42) |
"-42" |
Int to string |
strconv.FormatInt(255, 16) |
"ff" |
Base 16 |
Sprintf
The fmt.Sprintf
function
is often your best friend when formatting data:
s := fmt.Sprintf("%.4f", math.Pi)
This fmt cheat sheet
covers the most common formatting flags.
Regular expressions
For more advanced string handling, see this Regular expressions tutorial,
a gentle introduction to the regexp
package with cheat sheet
and plenty of examples.
Share: