Skip to main content

Strings and Formatting

Learn how to work with strings in Go, including escape characters, raw strings, and string formatting techniques.

Escape Characters​

Escape characters are special character sequences starting with \ that represent non-printable or special characters in strings.

Common Escape Characters​

EscapeDescriptionExample
\nNewline"Line1\nLine2"
\tTab"Name\tAge"
\"Double quote"She said \"Hi\""
\'Single quote'It\'s'
\\Backslash"C:\\path"
\rCarriage return"Text\r"
\bBackspace"Text\b"

Newline Character (\n)​

The newline character moves output to the next line:

package main

import "fmt"

func main() {
fmt.Println("Hello,\nGo!")
}

Output:

Hello,
Go!

Tab Character (\t)​

The tab character adds horizontal spacing (typically 8 spaces):

package main

import "fmt"

func main() {
fmt.Println("Hello,\tGo!")
}

Output:

Hello,	Go!

Formatting with Tabs​

Tabs are particularly useful for creating columnar output:

package main

import "fmt"

func main() {
fmt.Println("Name\tAge\tCity")
fmt.Println("Alice\t25\tNew York")
fmt.Println("Bob\t30\tSan Francisco")
fmt.Println("Charlie\t28\tBoston")
}

Output:

Name	Age	City
Alice 25 New York
Bob 30 San Francisco
Charlie 28 Boston

Double Quote Character (")​

Escape double quotes to include them within a string:

package main

import "fmt"

func main() {
fmt.Println("She said \"Hello\"")
fmt.Println("Quotation Marks Demo: \"\"")
}

Output:

She said "Hello"
Quotation Marks Demo: ""

Single Quote Character​

Single quotes don't need escaping in double-quoted strings:

package main

import "fmt"

func main() {
fmt.Println("It's a nice day")
fmt.Println("Single Quote Demo: '")
}

Output:

It's a nice day
Single Quote Demo: '

Backslash Character (\)​

Escape backslashes to display them literally:

package main

import "fmt"

func main() {
fmt.Println("C:\\Users\\Documents")
fmt.Println("Backslash Demo: \\")
}

Output:

C:\Users\Documents
Backslash Demo: \

Complete Escape Characters Example​

Here's a comprehensive demonstration of all escape characters:

package main

import "fmt"

func main() {
// \n - New line character (moves to next line)
fmt.Println("New Line Character Demo:")
fmt.Println("Hello,\nGo!")
fmt.Println()

// \t - Tab character (horizontal tab, typically 8 spaces)
fmt.Println("Tab Character Demo:")
fmt.Println("Hello,\tGo!")
fmt.Println()

// Practical example: Using tabs to format output in columns
fmt.Println("Formatting with Tabs:")
fmt.Println("Name\tAge\tCity")
fmt.Println("Alice\t25\tNew York")
fmt.Println("Bob\t30\tSan Francisco")
fmt.Println()

// \" - Double quote character (escaped to include in string)
fmt.Println("Quotation Marks Demo: \"\"")
fmt.Println()

// Single quote character (doesn't need escaping in double-quoted strings)
fmt.Println("Single Quote Demo: '")
fmt.Println()

// \\ - Backslash character (escaped to show literal backslash)
fmt.Println("Backslash Demo: \\")
fmt.Println()
}

Output:

New Line Character Demo:
Hello,
Go!

Tab Character Demo:
Hello, Go!

Formatting with Tabs:
Name Age City
Alice 25 New York
Bob 30 San Francisco

Quotation Marks Demo: ""

Single Quote Demo: '

Backslash Demo: \

Raw Strings​

Raw strings are enclosed in backticks (`) and treat all characters literally - backslashes don't need escaping and the strings can span multiple lines.

Basic Raw Strings​

package main

import "fmt"

func main() {
// Regular string - backslashes need escaping
fmt.Println("C:\\Users\\name\\Documents\\file.txt")

// Raw string - backslashes are literal
fmt.Println(`C:\Users\name\Documents\file.txt`)
}

Output:

C:\Users\name\Documents\file.txt
C:\Users\name\Documents\file.txt

Multi-Line Raw Strings​

Raw strings can span multiple lines without using \n:

package main

import "fmt"

func main() {
message := `Line 1
Line 2
Line 3`

fmt.Println(message)
}

Output:

Line 1
Line 2
Line 3

Raw String Demo​

package main

import "fmt"

func main() {
// Raw strings with backticks - no escape processing
fmt.Println("Raw String Demo (using backticks):")
fmt.Println(`C:\Users\name\Documents\file.txt`) // Backslashes don't need escaping
fmt.Println(`Line 1
Line 2
Line 3`) // Can span multiple lines without \n
}

Output:

Raw String Demo (using backticks):
C:\Users\name\Documents\file.txt
Line 1
Line 2
Line 3

When to Use Raw Strings​

Raw strings are particularly useful for:

File Paths​

Windows paths with backslashes are cleaner with raw strings:

// Regular string - needs escaping
path := "C:\\Program Files\\MyApp\\config.ini"

// Raw string - cleaner
path := `C:\Program Files\MyApp\config.ini`

Regular Expressions​

Regular expressions often contain many backslashes:

// Regular string - hard to read
pattern := "\\d{3}-\\d{2}-\\d{4}"

// Raw string - easier to read
pattern := `\d{3}-\d{2}-\d{4}`

Multi-Line Text​

JSON, SQL queries, templates are easier with raw strings:

// Multi-line JSON
json := `{
"name": "Alice",
"age": 25,
"city": "New York"
}`

// SQL query
query := `SELECT id, name, email
FROM users
WHERE active = true
ORDER BY name`

// HTML template
html := `<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>`

Configuration Files​

config := `
[server]
host = localhost
port = 8080

[database]
url = postgres://localhost/mydb
`

Comparing Regular vs Raw Strings​

File Paths​

package main

import "fmt"

func main() {
// Regular string - must escape backslashes
regularPath := "C:\\Users\\Documents\\projects\\go\\main.go"

// Raw string - backslashes are literal
rawPath := `C:\Users\Documents\projects\go\main.go`

fmt.Println("Regular:", regularPath)
fmt.Println("Raw: ", rawPath)
// Both produce the same output
}

Multi-Line Content​

package main

import "fmt"

func main() {
// Regular string - must use \n
regularText := "Line 1\nLine 2\nLine 3"

// Raw string - natural line breaks
rawText := `Line 1
Line 2
Line 3`

fmt.Println("Regular string:")
fmt.Println(regularText)
fmt.Println()
fmt.Println("Raw string:")
fmt.Println(rawText)
// Both produce the same output
}

String Formatting Tips​

Creating Tables​

Use tabs for aligned columns:

package main

import "fmt"

func main() {
fmt.Println("Product\t\tPrice\tQty")
fmt.Println("--------\t-----\t---")
fmt.Println("Laptop\t\t$999\t5")
fmt.Println("Mouse\t\t$25\t20")
fmt.Println("Keyboard\t$75\t15")
}

Output:

Product		Price	Qty
-------- ----- ---
Laptop $999 5
Mouse $25 20
Keyboard $75 15

Displaying File Paths​

Use raw strings for file paths:

package main

import "fmt"

func main() {
configPath := `C:\Program Files\MyApp\config.ini`
dataPath := `/home/user/data/input.txt`

fmt.Println("Config:", configPath)
fmt.Println("Data: ", dataPath)
}

Multi-Line Messages​

Use raw strings for multi-line content:

package main

import "fmt"

func main() {
welcome := `
========================================
Welcome to the Application!
========================================
Please select an option:
1. Start
2. Settings
3. Exit
========================================
`
fmt.Println(welcome)
}

Common Patterns​

Error Messages​

fmt.Println("Error: File not found\n\tPath: C:\\data\\input.txt")

Logging​

fmt.Println("[INFO]\tApplication started")
fmt.Println("[WARN]\tLow memory detected")
fmt.Println("[ERROR]\tConnection failed")

ASCII Art​

logo := `
____
/ ___| ___
| | _ / _ \
| |_| | (_) |
\____|\___/
`
fmt.Println(logo)

Best Practices​

1. Use Raw Strings for File Paths​

// Good - raw string
path := `C:\Users\Documents\file.txt`

// Avoid - escaped string
path := "C:\\Users\\Documents\\file.txt"

2. Use Tabs for Columnar Data​

// Good - tabs align columns
fmt.Println("Name\tAge\tCity")

// Avoid - spaces don't align well
fmt.Println("Name Age City")

3. Use Raw Strings for Multi-Line Content​

// Good - raw string
query := `SELECT id, name
FROM users
WHERE active = true`

// Avoid - escape sequences
query := "SELECT id, name\nFROM users\nWHERE active = true"

4. Add Blank Lines for Readability​

fmt.Println("Section 1")
fmt.Println() // Blank line
fmt.Println("Section 2")

Key Takeaways​

  • Escape characters start with \ and represent special characters
  • Common escapes: \n (newline), \t (tab), \" (quote), \\ (backslash)
  • Raw strings use backticks and treat backslashes literally
  • Raw strings can span multiple lines without \n
  • Use raw strings for file paths, regex, multi-line text
  • Use tabs for formatting columnar output
  • Escape sequences are processed in double-quoted strings only