Golang strconv.CanBackquote
last modified April 20, 2025
This tutorial explains how to use the strconv.CanBackquote function in Go.
We'll cover string validation basics with practical examples.
The strconv.CanBackquote function checks if a string can be represented as a raw string literal without escape sequences. It's useful for string validation.
Raw string literals in Go are enclosed in backquotes (`). They can contain any character except a backquote. This function helps validate strings for such usage.
Basic strconv.CanBackquote Example
The simplest use of strconv.CanBackquote checks if a string can be
a raw string literal. Here we demonstrate basic validation.
package main
import (
"fmt"
"strconv"
)
func main() {
str := "Hello, World!"
if strconv.CanBackquote(str) {
fmt.Printf("'%s' can be a raw string literal\n", str)
} else {
fmt.Printf("'%s' cannot be a raw string literal\n", str)
}
}
We check if "Hello, World!" can be a raw string literal. The function returns true for this string since it contains no backquotes or control characters.
Checking Strings with Backquotes
strconv.CanBackquote returns false for strings containing backquotes.
This example demonstrates this behavior.
package main
import (
"fmt"
"strconv"
)
func main() {
testStrings := []string{"normal", "with `backquote`", "`", "back`quote"}
for _, s := range testStrings {
if strconv.CanBackquote(s) {
fmt.Printf("'%s' can be backquoted\n", s)
} else {
fmt.Printf("'%s' cannot be backquoted\n", s)
}
}
}
We test various strings containing backquotes. Any string with a backquote
character will cause CanBackquote to return false.
Checking Control Characters
The function also checks for control characters. This example shows validation of strings with various control sequences.
package main
import (
"fmt"
"strconv"
)
func main() {
testCases := []string{
"safe",
"multi\nline",
"tab\tcharacter",
"bell\x07",
"null\x00",
}
for _, tc := range testCases {
result := strconv.CanBackquote(tc)
fmt.Printf("%q: %t\n", tc, result)
}
}
Strings with control characters like newlines, tabs, or null bytes cannot be raw string literals. The function detects these and returns false.
Validating User Input
A practical use case is validating user input for raw string usage. This example shows how to implement such validation.
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text to check: ")
input, _ := reader.ReadString('\n')
input = input[:len(input)-1] // Remove newline
if strconv.CanBackquote(input) {
fmt.Println("This text can be a raw string literal")
fmt.Println("Raw version:", "`" + input + "`")
} else {
fmt.Println("This text cannot be a raw string literal")
fmt.Println("Reason: contains backquotes or control characters")
}
}
We read user input and check if it can be a raw string literal. The program provides feedback and shows the raw string version if validation passes.
Comparing with IsPrint
This example compares CanBackquote with IsPrint to
show their different validation rules.
package main
import (
"fmt"
"strconv"
)
func main() {
testCases := []string{
"normal",
"with `",
"\t",
"\n",
"unicodeā",
}
for _, tc := range testCases {
canBackquote := strconv.CanBackquote(tc)
isPrint := true
for _, r := range tc {
if !strconv.IsPrint(r) {
isPrint = false
break
}
}
fmt.Printf("%q: CanBackquote=%t, IsPrint=%t\n",
tc, canBackquote, isPrint)
}
}
CanBackquote is stricter than IsPrint. It rejects
backquotes and some printable characters that IsPrint accepts.
Generating Safe SQL Queries
This practical example shows using CanBackquote to validate SQL
query components for safe raw string usage.
package main
import (
"fmt"
"strconv"
)
func main() {
tableName := "users"
columnName := "name"
if !strconv.CanBackquote(tableName) || !strconv.CanBackquote(columnName) {
fmt.Println("Invalid table or column name - potential SQL injection")
return
}
query := fmt.Sprintf("SELECT * FROM `%s` WHERE `%s` = ?",
tableName, columnName)
fmt.Println("Safe query:", query)
}
We validate table and column names before using them in a raw SQL query. This helps prevent SQL injection through malicious identifiers.
Validating Configuration Strings
This example demonstrates using CanBackquote to validate
configuration values before writing to a file.
package main
import (
"fmt"
"strconv"
)
type Config struct {
AppName string
Version string
Secret string
}
func validateConfig(c Config) error {
if !strconv.CanBackquote(c.AppName) {
return fmt.Errorf("invalid AppName")
}
if !strconv.CanBackquote(c.Version) {
return fmt.Errorf("invalid Version")
}
if !strconv.CanBackquote(c.Secret) {
return fmt.Errorf("invalid Secret")
}
return nil
}
func main() {
config := Config{
AppName: "MyApp",
Version: "1.0",
Secret: "s3cr3t`key", // Invalid because of backquote
}
if err := validateConfig(config); err != nil {
fmt.Println("Config validation failed:", err)
} else {
fmt.Println("Config is valid")
}
}
We validate configuration fields to ensure they can be safely written as raw string literals. The secret field fails validation due to a backquote.
Source
Go strconv package documentation
This tutorial covered the strconv.CanBackquote function in Go with
practical examples of string validation for raw string literals.
Author
List all Go tutorials.