Golang strconv.AppendQuoteRune
last modified April 20, 2025
This tutorial explains how to use the strconv.AppendQuoteRune
function in Go.
We'll cover rune quoting basics with practical examples.
The strconv.AppendQuoteRune function appends a single-quoted rune representation to a byte slice. It's useful for efficient string building.
The function handles escaping special characters and returns the extended byte slice. It's more efficient than string concatenation for building quoted output.
Basic strconv.AppendQuoteRune Example
The simplest use of strconv.AppendQuoteRune
appends a quoted rune
to a byte slice. Here we demonstrate basic usage.
package main import ( "fmt" "strconv" ) func main() { buf := []byte("Rune: ") buf = strconv.AppendQuoteRune(buf, 'A') fmt.Println(string(buf)) }
We start with a byte slice containing "Rune: ". We append a quoted 'A' rune to it. The output shows the combined result converted back to a string.
Appending Special Characters
strconv.AppendQuoteRune
automatically escapes special characters.
This example shows how it handles various runes.
package main import ( "fmt" "strconv" ) func main() { buf := []byte("Quoted: ") runes := []rune{'\n', '\t', '\'', '\\', '字'} for _, r := range runes { buf = strconv.AppendQuoteRune(buf, r) buf = append(buf, ' ') } fmt.Println(string(buf)) }
We append several special runes to a buffer. The function properly escapes newlines, tabs, quotes, and backslashes. Non-ASCII runes are also handled.
Building a Quoted Rune List
This example demonstrates building a list of quoted runes efficiently using
AppendQuoteRune
in a loop.
package main import ( "fmt" "strconv" ) func main() { buf := []byte("Runes: [") runes := []rune{'a', 'b', 'c', '☺', '世'} for i, r := range runes { if i > 0 { buf = append(buf, ',', ' ') } buf = strconv.AppendQuoteRune(buf, r) } buf = append(buf, ']') fmt.Println(string(buf)) }
We build a comma-separated list of quoted runes. The function efficiently appends each quoted rune to the buffer without creating intermediate strings.
Comparing with QuoteRune
This example compares AppendQuoteRune
with QuoteRune
to show the performance benefits of the append version.
package main import ( "fmt" "strconv" "strings" ) func main() { // Using QuoteRune (less efficient) var builder strings.Builder builder.WriteString("Using QuoteRune: ") builder.WriteString(strconv.QuoteRune('X')) fmt.Println(builder.String()) // Using AppendQuoteRune (more efficient) buf := []byte("Using AppendQuoteRune: ") buf = strconv.AppendQuoteRune(buf, 'X') fmt.Println(string(buf)) }
AppendQuoteRune
is more efficient when building output incrementally.
It avoids creating intermediate string objects like QuoteRune
does.
Appending to Existing JSON
This practical example shows using AppendQuoteRune
when building
JSON output with quoted rune values.
package main import ( "fmt" "strconv" ) func main() { buf := []byte(`{"symbols": [`) symbols := []rune{'€', '$', '¥', '£'} for i, s := range symbols { if i > 0 { buf = append(buf, ',', ' ') } buf = strconv.AppendQuoteRune(buf, s) } buf = append(buf, ']', '}') fmt.Println(string(buf)) }
We construct a JSON array of quoted currency symbols. The function ensures each rune is properly quoted and escaped in the JSON output.
Handling Invalid UTF-8
This example demonstrates how AppendQuoteRune
handles invalid
UTF-8 runes by escaping them properly.
package main import ( "fmt" "strconv" ) func main() { buf := []byte("Invalid: ") // Invalid UTF-8 sequence invalidRune := rune(0xDC00) // Lone surrogate buf = strconv.AppendQuoteRune(buf, invalidRune) fmt.Println(string(buf)) }
The function properly escapes invalid UTF-8 runes using Go's escape sequence format. This ensures the output remains valid UTF-8 even with bad input.
Performance Benchmark
This example benchmarks AppendQuoteRune
against string
concatenation to show its performance benefits.
package main import ( "fmt" "strconv" "strings" "time" ) func main() { const iterations = 100000 testRune := '世' // Benchmark AppendQuoteRune start := time.Now() buf := make([]byte, 0, iterations*6) for i := 0; i < iterations; i++ { buf = strconv.AppendQuoteRune(buf, testRune) } _ = string(buf) fmt.Println("AppendQuoteRune:", time.Since(start)) // Benchmark string concatenation start = time.Now() var s strings.Builder for i := 0; i < iterations; i++ { s.WriteString(strconv.QuoteRune(testRune)) } _ = s.String() fmt.Println("String concat:", time.Since(start)) }
AppendQuoteRune
is significantly faster for building large quoted
outputs. It avoids memory allocations by working directly with byte slices.
Source
Go strconv package documentation
This tutorial covered the strconv.AppendQuoteRune
function in Go with
practical examples of efficient rune quoting in various scenarios.
Author
List all Go tutorials.