Golang strconv.AppendQuoteRuneToASCII tutorial explains how to append quoted runes to ASCII byte slices in Go with practical examples.
last modified April 20, 2025
This tutorial explains how to use the strconv.AppendQuoteRuneToASCII function in Go. We’ll cover rune quoting basics with practical examples.
The strconv.AppendQuoteRuneToASCII function appends a single-quoted rune to a byte slice. It escapes non-ASCII and non-printable characters.
This function is useful for safely including runes in ASCII-only contexts. It returns a new byte slice with the quoted rune appended to the original slice.
The simplest use of AppendQuoteRuneToASCII appends a quoted rune to an existing byte slice. Here we demonstrate basic functionality.
basic_append.go
package main
import ( “fmt” “strconv” )
func main() { buf := []byte(“Rune: “) r := ‘A’
result := strconv.AppendQuoteRuneToASCII(buf, r)
fmt.Println(string(result))
}
We start with a byte slice containing “Rune: “. We append a quoted ‘A’ rune to it. The output shows the original text with the quoted rune added.
AppendQuoteRuneToASCII escapes non-ASCII runes. This example shows how it handles Unicode characters outside the ASCII range.
non_ascii.go
package main
import ( “fmt” “strconv” )
func main() { buf := []byte(“Symbol: “) r := ‘€’ // Euro sign (U+20AC)
result := strconv.AppendQuoteRuneToASCII(buf, r)
fmt.Println(string(result))
}
The Euro sign (€) is outside ASCII range, so it gets escaped. The output shows the Unicode escape sequence instead of the actual character.
Control characters are also escaped by AppendQuoteRuneToASCII. This example demonstrates handling of special characters.
control_chars.go
package main
import ( “fmt” “strconv” )
func main() { buf := []byte(“Control: “) r := ‘\n’ // Newline character
result := strconv.AppendQuoteRuneToASCII(buf, r)
fmt.Println(string(result))
}
The newline character is escaped as ‘\n’ in the output. This makes the character visible and safe for ASCII-only contexts.
We can use AppendQuoteRuneToASCII to build a slice with multiple quoted runes. This example shows incremental construction.
building_slice.go
package main
import ( “fmt” “strconv” )
func main() { var buf []byte runes := []rune{‘H’, ’e’, ’l’, ’l’, ‘o’, ’ ‘, ‘世’, ‘界’}
for _, r := range runes {
buf = strconv.AppendQuoteRuneToASCII(buf, r)
buf = append(buf, ' ')
}
fmt.Println(string(buf))
}
We start with an empty byte slice and append each quoted rune. Non-ASCII runes (世 and 界) are escaped. Spaces are added between quoted runes for readability.
AppendQuoteRuneToASCII is similar to QuoteRuneToASCII but works with byte slices. This example shows both functions.
comparison.go
package main
import ( “fmt” “strconv” )
func main() { r := ‘¶’ // Pilcrow sign
// Using QuoteRuneToASCII
quoted := strconv.QuoteRuneToASCII(r)
fmt.Println("QuoteRuneToASCII:", quoted)
// Using AppendQuoteRuneToASCII
buf := []byte("AppendQuoteRuneToASCII: ")
result := strconv.AppendQuoteRuneToASCII(buf, r)
fmt.Println(string(result))
}
Both functions produce the same quoted output, but AppendQuoteRuneToASCII works with existing byte slices. This is more efficient for building output.
AppendQuoteRuneToASCII is efficient for building output buffers. This example benchmarks it against string concatenation.
performance.go
package main
import ( “fmt” “strconv” “strings” “time” )
func main() { const iterations = 100000 runes := []rune{‘a’, ‘b’, ‘c’, ‘1’, ‘2’, ‘3’, ‘§’, ‘©’}
// Benchmark AppendQuoteRuneToASCII
start := time.Now()
var buf []byte
for i := 0; i < iterations; i++ {
for _, r := range runes {
buf = strconv.AppendQuoteRuneToASCII(buf, r)
}
buf = buf[:0] // Reset buffer
}
fmt.Println("AppendQuoteRuneToASCII:", time.Since(start))
// Benchmark string concatenation
start = time.Now()
var s string
for i := 0; i < iterations; i++ {
for _, r := range runes {
s += strconv.QuoteRuneToASCII(r)
}
s = "" // Reset string
}
fmt.Println("String concatenation:", time.Since(start))
}
AppendQuoteRuneToASCII is significantly faster than string concatenation for building large outputs. It avoids repeated allocations.
This practical example demonstrates using AppendQuoteRuneToASCII to build a simple JSON string with proper escaping.
json_encoding.go
package main
import ( “fmt” “strconv” )
func main() { var buf []byte name := “José” value := 42
buf = append(buf, `{"name":"`...)
for _, r := range name {
buf = strconv.AppendQuoteRuneToASCII(buf, r)
}
buf = append(buf, `","value":`...)
buf = strconv.AppendInt(buf, int64(value), 10)
buf = append(buf, '}')
fmt.Println(string(buf))
}
We build a JSON object with a string containing non-ASCII characters. The runes are properly quoted and escaped. The integer value is appended directly.
Go strconv package documentation
This tutorial covered the strconv.AppendQuoteRuneToASCII function in Go with practical examples of rune quoting in various scenarios.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all Go tutorials.