Урок 1: Первое знакомство с Go
Добро пожаловать в ваш первый урок по Go! В этом уроке мы не только напишем классическую программу "Hello, World!", но и разберёмся, почему Go стал одним из самых популярных языков программирования в современной разработке.
Почему Go?
Прежде чем мы начнём писать код, давайте поговорим о том, почему Go стоит изучать:
- Простота и читаемость: Синтаксис Go минималистичен и понятен
- Высокая производительность: Go компилируется в нативный код
- Встроенная поддержка конкурентности: Горутины и каналы делают параллельное программирование простым
- Богатая стандартная библиотека: Множество готовых решений "из коробки"
- Кроссплатформенность: Один код работает на разных операционных системах
- Сильная типизация: Помогает избежать ошибок на этапе компиляции
Ваша первая программа на Go
Вот наш код:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!") // Выведет: Hello, World!
}
Давайте разберём его по частям и поймём, почему он работает именно так.
Разбор кода
1. package main
В Go код организуется в пакеты (packages). Пакет main — это особый пакет, который сообщает компилятору, что этот файл является точкой входа в программу. Без него программа не сможет быть запущена как исполняемый файл.
💡 Интересный факт: В Go нет понятия "классов" как в объектно-ориентированных языках. Вместо этого используются пакеты и структуры.
2. import "fmt"
Ключевое слово import позволяет подключать внешние пакеты. В нашем примере мы используем fmt — это библиотека для работы с вводом и выводом, которая входит в стандартную библиотеку Go.
🚀 Совет: Стандартная библиотека Go очень богата. Позже мы изучим такие пакеты как:
net/httpдля работы с вебencoding/jsonдля работы с JSONosдля работы с операционной системой- и многие другие
3. func main()
Функция main() — это точка входа в любую программу на Go. Каждый исполняемый файл должен иметь функцию с именем main, иначе программа не запустится.
⚡ Важно: В Go нет понятия "конструктора" как в других языках. Инициализация обычно происходит в функции
init(), которая выполняется автоматически передmain().
4. fmt.Println()
Функция fmt.Println() выводит текст в консоль и автоматически добавляет новую строку.
Разные способы вывода в Go:
// Простой вывод
fmt.Print("Hello, ") // Без перевода строки
fmt.Print("World!") // Выведет: Hello, World!
// Вывод с переводом строки
fmt.Println("Hello, World!") // Выведет: Hello, World! и переведёт строку
// Форматированный вывод
name := "Иван"
age := 25
fmt.Printf("Привет, %s! Тебе %d лет.\n", name, age)
// Выведет: Привет, Иван! Тебе 25 лет.
Работа с вводом данных
Go предоставляет несколько способов для ввода данных. Давайте рассмотрим основные:
1. Простой ввод с fmt.Scan
package main
import "fmt"
func main() {
var name string
fmt.Println("Введите ваше имя:")
fmt.Scan(&name)
fmt.Printf("Привет, %s!\n", name)
}
2. Ввод нескольких значений
var firstName, lastName string
fmt.Println("Введите ваше имя и фамилию:")
fmt.Scan(&firstName, &lastName)
fmt.Printf("Привет, %s %s!\n", firstName, lastName)
3. Более продвинутый ввод с bufio
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Println("Введите ваше имя:")
name, _ := reader.ReadString('\n')
fmt.Printf("Привет, %s!\n", name)
}
Практические задания
Задание 1: Калькулятор возраста
Напишите программу, которая:
- Запрашивает год рождения пользователя
- Вычисляет его возраст
- Выводит приветствие с указанием возраста
Задание 2: Конвертер температур
Создайте программу, которая:
- Запрашивает температуру в градусах Цельсия
- Конвертирует её в градусы Фаренгейта
- Выводит результат с точностью до двух знаков после запятой
Задание 3: Генератор паролей
Напишите простой генератор паролей, который:
- Запрашивает длину пароля
- Генерирует случайный пароль заданной длины
- Выводит результат
💡 Совет: Для генерации случайных чисел используйте пакет
math/rand
🎯 Цель урока: К концу этого урока вы должны уметь:
- Создавать простые программы на Go
- Работать с вводом и выводом данных
- Понимать базовую структуру Go-программы
- Использовать основные функции пакета fmt