Чтение пользовательского ввода — фундаментальный аспект многих программ, и Go предоставляет для этого мощный инструмент: сканер. В этой статье мы рассмотрим различные методы, доступные в пакете Go Scanner, и узнаем, как максимально эффективно использовать их. Так что хватайте свой любимый напиток и вперед!
Метод 1: чтение одной строки текста
Самый простой способ прочитать вводимые пользователем данные — использовать метод Scan. Он читает одну строку текста до тех пор, пока не встретится символ новой строки. Давайте рассмотрим пример:
package main
import (
"fmt"
"os"
"bufio"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Enter your name: ")
scanner.Scan()
name := scanner.Text()
fmt.Println("Hello, " + name + "!")
}
Метод 2: чтение нескольких строк текста
Если вам нужно прочитать несколько строк текста, вы можете использовать метод Scanв цикле, пока не будет выполнено желаемое условие. Вот пример, который читает строки до тех пор, пока пользователь не введет «выход»:
package main
import (
"fmt"
"os"
"bufio"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("Enter multiple lines of text (type 'exit' to quit): ")
for scanner.Scan() {
text := scanner.Text()
if text == "exit" {
break
}
fmt.Println("You entered:", text)
}
}
Метод 3: анализ входных данных различных типов
Сканер также предоставляет методы для анализа входных данных различных типов, таких как целые числа и числа с плавающей запятой. Давайте посмотрим пример чтения целого числа:
package main
import (
"fmt"
"os"
"bufio"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Enter your age: ")
scanner.Scan()
age := scanner.Text()
var parsedAge int
_, err := fmt.Sscanf(age, "%d", &parsedAge)
if err != nil {
fmt.Println("Invalid input:", age)
} else {
fmt.Println("Your age is:", parsedAge)
}
}
Метод 4: настройка поведения сканера
Пакет Go Scanner позволяет настроить его поведение в соответствии с вашими потребностями. Вы можете установить собственный разделитель, изменить максимальный размер токена и многое другое. Вот пример, демонстрирующий замену разделителя на запятую:
package main
import (
"fmt"
"os"
"bufio"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
fmt.Println("Enter words separated by commas: ")
for scanner.Scan() {
word := scanner.Text()
fmt.Println("You entered:", word)
}
}
В этой статье мы рассмотрели несколько методов, предлагаемых пакетом Go Scanner для чтения вводимых пользователем данных в различных сценариях. Мы рассмотрели чтение отдельных строк, нескольких строк, анализ различных типов ввода и настройку поведения сканера. Освоив эти методы, вы сможете улучшить интерактивность и удобство использования ваших приложений Go. Так что смело экспериментируйте с методами сканера, чтобы решить любые проблемы с чтением входных данных, с которыми вы можете столкнуться в процессе программирования!