User Input
This guide covers different methods of handling user input in Go programming language.
π Basic Input Methods
Using fmt.Scan
package main
import "fmt"
func main() {
var name string
fmt.Print("Enter your name: ")
fmt.Scan(&name)
fmt.Printf("Hello, %s!\n", name)
}Using fmt.Scanf
package main
import "fmt"
func main() {
var name string
var age int
fmt.Print("Enter name and age (e.g., John 25): ")
fmt.Scanf("%s %d", &name, &age)
fmt.Printf("Name: %s, Age: %d\n", name, age)
}Using fmt.Scanln
package main
import "fmt"
func main() {
var input string
fmt.Print("Enter text: ")
fmt.Scanln(&input)
fmt.Printf("You entered: %s\n", input)
}π Reading Strings
Using bufio.NewReader
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Printf("You entered: %s", text)
}Reading Multiple Lines
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("Enter multiple lines (Ctrl+D to finish):")
for scanner.Scan() {
fmt.Println("You entered:", scanner.Text())
}
}π’ Reading Numbers
Integer Input
package main
import "fmt"
func main() {
var number int
fmt.Print("Enter a number: ")
fmt.Scan(&number)
fmt.Printf("You entered: %d\n", number)
}Float Input
package main
import "fmt"
func main() {
var number float64
fmt.Print("Enter a decimal number: ")
fmt.Scan(&number)
fmt.Printf("You entered: %.2f\n", number)
}π― Input Validation
Basic Validation
package main
import (
"fmt"
"strconv"
)
func main() {
var input string
fmt.Print("Enter a number: ")
fmt.Scan(&input)
number, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid number!")
return
}
fmt.Printf("Valid number: %d\n", number)
}Advanced Validation
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("Enter email (or 'quit' to exit): ")
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
if input == "quit" {
break
}
if !strings.Contains(input, "@") {
fmt.Println("Invalid email format!")
continue
}
fmt.Printf("Valid email: %s\n", input)
}
}π Interactive Input
Menu System
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
for {
fmt.Println("\nMenu:")
fmt.Println("1. Say Hello")
fmt.Println("2. Show Time")
fmt.Println("3. Exit")
fmt.Print("Choose an option: ")
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
switch input {
case "1":
fmt.Println("Hello!")
case "2":
fmt.Println("Current time is...")
case "3":
fmt.Println("Goodbye!")
return
default:
fmt.Println("Invalid option!")
}
}
}π File Input
Reading from File
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("input.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}π‘ Best Practices
Error Handling
Always check for errors when reading input
Provide clear error messages to users
Handle invalid input gracefully
Input Buffering
Use
bufio.NewReaderfor reading strings with spacesClear input buffer after reading
Handle newline characters properly
Type Safety
Validate input before conversion
Use appropriate type conversion functions
Handle conversion errors
User Experience
Provide clear prompts
Give feedback for invalid input
Allow ways to exit or cancel
π§ Common Issues and Solutions
Handling Newlines
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
// Read and trim newline
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
fmt.Printf("You entered: %s\n", input)
}Buffer Clearing
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter a number: ")
var number int
fmt.Scan(&number)
// Clear buffer
reader.ReadString('\n')
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Printf("Number: %d, Text: %s", number, text)
}π Additional Resources
Last updated
Was this helpful?