Урок 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 для работы с JSON
  • os для работы с операционной системой
  • и многие другие

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: Калькулятор возраста

Напишите программу, которая:

  1. Запрашивает год рождения пользователя
  2. Вычисляет его возраст
  3. Выводит приветствие с указанием возраста

Задание 2: Конвертер температур

Создайте программу, которая:

  1. Запрашивает температуру в градусах Цельсия
  2. Конвертирует её в градусы Фаренгейта
  3. Выводит результат с точностью до двух знаков после запятой

Задание 3: Генератор паролей

Напишите простой генератор паролей, который:

  1. Запрашивает длину пароля
  2. Генерирует случайный пароль заданной длины
  3. Выводит результат

💡 Совет: Для генерации случайных чисел используйте пакет math/rand

🎯 Цель урока: К концу этого урока вы должны уметь:

  • Создавать простые программы на Go
  • Работать с вводом и выводом данных
  • Понимать базовую структуру Go-программы
  • Использовать основные функции пакета fmt