Глиф Учебники

Go

Программирование · 10 уроков · 16 справок · итоговый тест

Go (Golang) — простой и быстрый язык для серверов и утилит. Курс с нуля: установка, типы, срезы, map, функции и ошибки, структуры и интерфейсы, горутины, модули.

Go (часто говорят Golang — по старому адресу сайта golang.org) — язык программирования, который создали в Google Роберт Гризмер, Роб Пайк и Кен Томпсон. Язык представили в 2009 году, версия 1.0 вышла в 2012-м. Go бесплатен, его исходный код открыт, программы на нём работают в Windows, macOS и Linux.

Go задуман простым: в нём мало служебных слов, один вид цикла, нет классов и наследования. Программа компилируется в машинный код — в один исполняемый файл, которому на компьютере, где он запускается, обычно не нужны ни интерпретатор, ни дополнительные библиотеки. Компилятор работает быстро, и готовые программы тоже.

Где применяется

Что нужно для начала

Новые версии Go выходят два раза в год — в феврале и в августе. Создатели языка обещают совместимость для всей ветки Go 1: программа, написанная для старой версии, собирается и в новой. Курс опирается на Go 1.22 — в этой версии появился цикл for i := range 10 и изменились правила переменных цикла, поэтому в старых версиях часть примеров поведёт себя иначе.

Как пройти курс

Уроки идут по порядку: установка и первая программа, переменные и типы, ввод и вывод, условия и циклы, срезы, map, функции и ошибки, структуры и интерфейсы, горутины и каналы, пакеты и модули. Почти все программы в уроках целые: их можно скопировать в файл main.go и запустить командой go run ., а под программой показано, что она выведет. Если программа читает ввод с клавиатуры, то, что нужно набрать, показано отдельным блоком.

В Go строгий компилятор: неиспользуемая переменная или лишний import — ошибка, а не предупреждение. Поначалу это раздражает, но сообщения компилятора короткие и точные, а частые из них разобраны в справочнике. После каждого урока — несколько вопросов для проверки, в конце курса — итоговый тест.

Тем, кто пишет на Python, Go покажется многословнее, зато ошибки типов он ловит ещё до запуска. Связанные темы — Python, Docker (программы на Go часто запускают в контейнерах) и Bash.

Курс с нуля

  1. 1.Установка Go и первая программаКак установить Go, создать модуль командой go mod init, написать первую программу с package main и fmt.Println, запустить её через go run и собрать go build.
  2. 2.Переменные, := и типыКак объявить переменную в Go через var и :=, какие бывают типы (int, float64, string, bool, rune), нулевые значения, константы, преобразование типов и деление целых.
  3. 3.Ввод и вывод — fmt.Scan, bufio и PrintfКак прочитать числа и строки с клавиатуры в Go (fmt.Scan, bufio.Scanner), как выводить через fmt.Printf с форматом %d, %s, %.2f, %v, и как ускорить ввод-вывод для больших данных.
  4. 4.Условия, switch и цикл forКак в Go писать if и else, switch без break, условие с коротким объявлением, и как устроен единственный цикл for — классический, «пока», бесконечный и range, с break, continue и метками.
  5. 5.Массивы, срезы и appendЧем массив в Go отличается от среза, как создать срез литералом и через make, добавить элементы через append, взять часть среза, скопировать через copy и обойти range.
  6. 6.Map — словари в GoКак создать map в Go литералом и через make, добавить, прочитать и удалить значение, проверить ключ через v, ok, обойти map по порядку ключей и посчитать слова в тексте.
  7. 7.Функции, несколько значений и ошибкиКак объявить функцию в Go, вернуть несколько значений, передать переменное число аргументов, и как устроены ошибки — тип error, errors.New, fmt.Errorf с %w и проверка if err != nil.
  8. 8.Структуры, методы и интерфейсыКак в Go описать свой тип через struct, написать методы с приёмником-значением и приёмником-указателем, что такое указатель, и как интерфейсы заменяют классы и наследование.
  9. 9.Горутины и каналыКак запустить код параллельно в Go: горутины и go, ожидание через sync.WaitGroup, передача данных по каналам, close и range, буферизованные каналы, гонки данных и sync.Mutex.
  10. 10.Пакеты и модулиКак разложить программу на Go по пакетам, что такое модуль и go.mod, как импортировать свой пакет и чужой (go get, go mod tidy, go.sum) и какие команды go пригодятся каждый день.

Начать с первого урока

Итоговый тест — 20 вопросов по всему курсу, ответы проверяются сразу.

Справочник

Официальная документация