Golang strconv.AppendQuoteRuneToGraphic
last modified April 20, 2025
This tutorial explains how to use the strconv.AppendQuoteRuneToGraphic
function in Go.
We'll cover rune quoting basics with practical examples.
The strconv.AppendQuoteRuneToGraphic function appends a single-quoted Go character literal representing the rune to a byte slice. It handles special characters by escaping them.
This function is particularly useful when you need to safely quote runes for output or serialization. It ensures non-printable and special characters are properly escaped.
Basic AppendQuoteRuneToGraphic Example
The simplest use of AppendQuoteRuneToGraphic
appends a quoted rune
to a byte slice. Here we demonstrate basic usage with a printable character.
package main import ( "fmt" "strconv" ) func main() { buf := []byte("Rune: ") r := 'A' result := strconv.AppendQuoteRuneToGraphic(buf, r) fmt.Println(string(result)) }
We start with a byte slice containing "Rune: ". The function appends the quoted version of 'A' to this slice. The output shows the properly quoted character.
Handling Special Characters
AppendQuoteRuneToGraphic
automatically escapes special characters.
This example shows how it handles newline and tab characters.
package main import ( "fmt" "strconv" ) func main() { testCases := []rune{'\n', '\t', '\'', '\\'} for _, r := range testCases { buf := []byte("Rune: ") quoted := strconv.AppendQuoteRuneToGraphic(buf, r) fmt.Println(string(quoted)) } }
We test various special characters that need escaping. The function properly quotes each one, using Go escape sequences where necessary.
Working with Non-Printable Characters
Non-printable characters are also properly handled by this function. This example demonstrates quoting control characters.
package main import ( "fmt" "strconv" ) func main() { buf := []byte("Control char: ") r := rune(0x7F) // DEL character result := strconv.AppendQuoteRuneToGraphic(buf, r) fmt.Println(string(result)) }
The DEL character (0x7F) is non-printable. The function escapes it using hexadecimal notation, making it safe for output.
Appending Multiple Runes
While designed for single runes, we can use this function in a loop to process multiple characters. This example shows how.
package main import ( "fmt" "strconv" ) func main() { input := "Hello\n世界" buf := []byte("Quoted: ") for _, r := range input { buf = strconv.AppendQuoteRuneToGraphic(buf, r) buf = append(buf, ' ') // Add space between quoted runes } fmt.Println(string(buf)) }
We process each rune in a string individually. The function handles both ASCII and Unicode characters correctly, escaping where needed.
Comparing with QuoteRuneToGraphic
AppendQuoteRuneToGraphic
is similar to QuoteRuneToGraphic
but works with byte slices. This example compares both.
package main import ( "fmt" "strconv" ) func main() { r := 'ß' // German sharp s // Using QuoteRuneToGraphic quotedStr := strconv.QuoteRuneToGraphic(r) fmt.Println("String version:", quotedStr) // Using AppendQuoteRuneToGraphic buf := []byte("Byte slice version: ") quotedBytes := strconv.AppendQuoteRuneToGraphic(buf, r) fmt.Println(string(quotedBytes)) }
Both functions produce the same quoted representation. The append version is more efficient when building output incrementally.
Performance Considerations
For building large quoted outputs, pre-allocating buffer space can improve performance. This example demonstrates the technique.
package main import ( "fmt" "strconv" ) func main() { input := "This is a test string with \t and \n" // Pre-allocate buffer with estimated capacity buf := make([]byte, 0, len(input)*3) for _, r := range input { buf = strconv.AppendQuoteRuneToGraphic(buf, r) buf = append(buf, ' ') } fmt.Println("Result:", string(buf)) }
Pre-allocation reduces memory allocations during append operations. The capacity estimate accounts for quoted runes being longer than originals.
Practical Example: JSON-like Output
This practical example demonstrates using the function to create JSON-like output with properly escaped characters.
package main import ( "fmt" "strconv" ) func main() { userInput := "Name\tAge\nAlice\t25\nBob\t30" buf := []byte(`{"description": `) // Start array of quoted runes buf = append(buf, '[') for i, r := range userInput { if i > 0 { buf = append(buf, ',', ' ') } buf = strconv.AppendQuoteRuneToGraphic(buf, r) } buf = append(buf, ']', '}') fmt.Println(string(buf)) }
We create a JSON-like structure with each character properly quoted. Special characters in the input are automatically escaped for safe JSON output.
Source
Go strconv package documentation
This tutorial covered the strconv.AppendQuoteRuneToGraphic
function
in Go with practical examples of rune quoting in various scenarios.
Author
List all Go tutorials.