Что такое Go и зачем он нужен
2007 год. Google. 45 минут тишины
Три инженера Google — Роберт Гризмер, Роб Пайк и Кен Томпсон — запустили сборку большого C++ проекта и... пошли пить кофе. Компиляция шла 45 минут.
Пока они ждали, набросали идею. Что если сделать язык, который:
- компилируется за секунды, а не минуты
- такой же читаемый, как Python
- такой же быстрый, как C
- с конкурентностью из коробки
Кен Томпсон — тот самый человек, который создал Unix и язык C. Роб Пайк — соавтор UTF-8. Это не стартап-проект, это люди, которые буквально придумали современные ОС.
В 2009 году Go стал открытым. В 2012 вышел Go 1.0 с главным обещанием: обратная совместимость навсегда. Код, написанный в 2012, компилируется компилятором 2024 без изменений.
Первый взгляд на язык
Вот программа Hello World на Go:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}Несколько вещей сразу бросаются в глаза:
package main— каждый файл принадлежит пакетуimport "fmt"— стандартная библиотека, fmt = formattingfunc main()— точка входа, как в C- Нет точек с запятой. Нет скобок вокруг условий. Нет
public/private.
Сравни с Java:
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}Один и тот же результат. Но в Go — 5 строк, в Java — 5 строк с обвесом. В реальных проектах разрыв ещё больше.
Философия: сложность мультипликативна
В Go 25 ключевых слов. Вот они все:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
Это не случайность. Авторы намеренно убрали всё, без чего можно обойтись:
- Нет
while— есть толькоfor(он умеет всё) - Нет исключений — есть возврат ошибок через значения
- Нет наследования — есть композиция и интерфейсы
- Нет перегрузки функций — одно имя, одна функция
«Сложность мультипликативна. Убери одну сложность — и весь язык станет проще.» — Роб Пайк
Выучить синтаксис Go можно за один день. Его читать — ещё быстрее, потому что в нём нет магии.
Горутины: конкурентность без боли
Одна из главных причин выбирать Go — горутины (goroutines).
Обычный поток ОС весит ~1 МБ памяти. Горутина — ~2-8 КБ. На одной машине можно запустить сотни тысяч горутин одновременно.
func main() {
go sendEmail() // запускается параллельно
go processPayment() // тоже параллельно
go updateDatabase() // и это тоже
time.Sleep(time.Second) // ждём завершения
}Ключевое слово go перед вызовом функции — и она запускается в отдельной горутине. Это настолько просто, что кажется магией. В Java для этого нужен ExecutorService, ThreadPool, Future...
Горутины — тема Модуля 7. Пока запомни: это главная суперсила Go.
Где используется Go сегодня
| Проект | Описание | Почему Go |
|---|---|---|
| Docker | Контейнеризация | Один бинарник, быстрый старт |
| Kubernetes | Оркестрация | Конкурентность, производительность |
| Terraform | Инфраструктура как код | Кросс-платформа, один файл |
| Prometheus | Мониторинг | Высокая нагрузка, горутины |
| CockroachDB | Распределённая БД | Производительность близкая к C |
| Caddy | Веб-сервер | Простота развёртывания |
Все эти проекты используются миллионами компаний. Kubernetes запускает большинство облачной инфраструктуры в мире.
Go vs другие языки
Go занимает нишу, которую раньше не мог занять никто: простота Python + скорость близкая к C + горутины. Выбери метрику в интерактивном блоке выше и сравни сам.
Итог
Go создали как ответ на реальные боли: медленная компиляция, сложный C++, боль с конкурентностью. Получился язык с маленьким ядром (25 слов), горутинами и гарантией обратной совместимости.
Сегодня Go — это язык инфраструктуры. Если ты работаешь с Docker, Kubernetes или облаком — ты уже используешь Go, просто не писал на нём сам.
Следующий урок: установим Go, напишем первую программу и разберём что в ней происходит по строкам.