Go
Изучите Go от начала до конца. Начните с пакетов, переменных и управления потоком выполнения, затем углубитесь в структуры, интерфейсы, конкурентность, тестирование, HTTP-серверы, базы данных, дженерики, профилирование и публикацию готовых бинарных файлов в продакшен.
20 уроков по порядку
- 125 мин
Привет, Go
Добро пожаловать. Если вы никогда раньше не писали код, вы попали куда нужно. Go - это язык программирования, то есть способ давать компьютеру...
Package mainImportFunc mainFmt.PrintlnGo run - 225 мин
Переменные и типы
В прошлом уроке вы вывели неизменный кусок текста. Настоящим программам нужно помнить то, что меняется: имя клиента, цену, поставлена ли галочка....
Var declarationShort declaration :=IntFloat64StringBool+2 - 330 мин
Управление потоком: if и for
Пока что каждая написанная вами программа выполняется сверху вниз, строка за строкой, без единого выбора по дороге. Настоящим программам нужно...
IfElse ifElseFor loopFor as whileInfinite for+2 - 430 мин
Функции
Всё, что вы писали до сих пор, жило внутри func main(). Для десятка строк это годится, но настоящим программам приходится вычислять одно и то же не в...
Func keywordParametersReturn valuesMultiple return valuesNamed return valuesBlank identifier - 535 мин
Срезы (slices) и карты (maps)
Каждая переменная, которой вы пользовались до сих пор, держит ровно одно значение: одно имя, один возраст, одну цену. В настоящих задачах речь почти...
Slice literalAppendLenIndexingRangeMap literal+2 - 635 мин
Структуры (structs) и указатели (pointers)
Любая переменная, которую вы писали в этом курсе до сих пор, хранит одно отдельное значение: одно число, одну строку, один срез. Но настоящие данные...
Struct definitionField accessZero values for structsPointer types& and * operatorsPointer receivers vs value receivers+1 - 735 мин
Методы (methods) и интерфейсы (interfaces)
В прошлом уроке вы научились складывать связанные поля в структуру, но структура сама по себе держит только данные, поведения у неё нет. Если вы...
Method declarationReceiver typesPointer vs value receiversInterface definitionImplicit interface satisfactionSmall interfaces+1 - 835 мин
Обработка ошибок
Вы уже не раз набирали в этом курсе if err != nil, так и не остановившись, чтобы спросить, что такое err на самом деле и откуда он берётся. Функции...
Error interfaceFmt.Errorf with %wErrors.IsErrors.AsCustom error typesPanic vs error+1 - 935 мин
Модули (modules) и структура проекта
Каждая программа, написанная вами в этом курсе до сих пор, жила одним файлом, который запускался одной командой. Настоящие проекты на Go почти...
Go mod initGo.mod and go.sumImport pathsPackage vs moduleInternal/ folderCmd/ layout+1 - 1040 мин
Мини-проект на основе CLI
До сих пор во всех ваших программах входные данные были вписаны прямо в исходный код. Чтобы сложить другие числа, вы правили файл и запускали его...
Os.ArgsStrconv.AtoiError handling with if err != nilOs.ExitGo buildPutting it together - 1140 мин
Обзор стандартной библиотеки
В изучении любого языка наступает момент, когда вопрос «как написать цикл» сменяется вопросом «как прочитать файл, как отформатировать дату, как...
FmtStringsStrconvTimeOsBufio+1 - 1240 мин
Тестирование и бенчмарки (benchmarks)
Вы написали функцию, запустили программу, увидели правильный ответ и пошли дальше. Через неделю вы меняете что-то рядом, и функция тихо начинает...
Go testTesting.TTable-driven testsT.Run subtestsTesting.B benchmarks_test.go file naming+1 - 1340 мин
Горутины (goroutines) и каналы (channels)
Программе нужно скачать двадцать файлов. Если написать это обычным способом, она скачает первый, подождёт, скачает второй, снова подождёт, и так до...
The go keywordGoroutine lifetimeUnbuffered channelsBuffered channelsSend and receiveRange over channel+1 - 1445 мин
Паттерны параллелизма
Горутины и каналы служат сырьём, вроде досок и шурупов. Знать, что это такое, ещё не значит уметь собрать стул. На практике почти весь конкурентный...
Select statementContext.Context for cancellationSync.WaitGroupSync.MutexWorker pool patternFan-out fan-in idea - 1535 мин
Дженерики (generics)
Вы пишете функцию, которая находит наибольшее число в срезе int. Потом такая же нужна для float64, вы копируете её и меняете два слова. Потом ещё...
Type parameters with [T any]ConstraintsComparableTilde approximation ~intGeneric Map and FilterWhen generics help, when they do not - 1645 мин
HTTP-серверы
В большинстве языков "написать веб-сервис" начинается с выбора фреймворка, и этот выбор важен, потому что фреймворк решает, как работает...
Net/httpHttp.HandleFuncHttp.ServerJSON responsesRequest routingMiddleware via http.Handler wrapping+1 - 1745 мин
Базы данных с database/sql
Любая программа, которую вы писали до сих пор, забывает всё в тот момент, когда завершается. Для утилиты, которая преобразует входные данные и...
Database/sql packageDriver importsSql.Open and sql.DB poolExec vs Query vs QueryRowPrepared statementsScanning rows+1 - 1840 мин
Производительность и профилирование
В какой-то момент кто-то говорит, что сервис работает медленно, вы открываете код и сразу замечаете цикл, который наверняка в этом виноват. Вы его...
Go test -benchPprof CPU and heap profilesEscape analysis with -gcflags=-mAvoiding unnecessary allocationsPreallocating slicesSync.Pool intuition - 1940 мин
Паттерны проектирования в Go
Программы разрастаются. Файл, который был совершенно понятен на двухстах строках, превращается в место, где мелкая правка ломает что-то в трёх файлах...
Functional options patternRepository patternDependency injection via interfacesContext propagation through call stacksConstructor functions - 2045 мин
Развёртывание и эксплуатация
Между программой, которая работает у вас на ноутбуке, и программой, которую вы спокойно оставите работать на всю ночь, есть разрыв. Закрывать его...
CGO_ENABLED=0 static binariesCross-compile with GOOS and GOARCHGraceful shutdown with http.Server and signal.NotifyContextMinimal Dockerfile with scratch or distrolessReading config from environment variables
Изучай Go на своём языке
Каждый урок, тест и ответ наставника показывается на вашем языке. AI-наставник отвечает на том языке, на котором вы пишете.
Roles that use Go
See how hiring teams interview engineers on Go, in production-like environments.
Backend Engineer (Go, Rust, Java)
Hire backend engineers in real services with real databases, real concurrency and real latency budgets. Live or take-home, fully recorded.
See the interviewDistributed Systems Engineer
Hire distributed systems engineers in workspaces with real Kafka, real consensus and real partition tooling. Live or take-home, fully recorded.
See the interviewPlatform Engineer
Hire platform engineers who reduce friction for every team. Real golden-path templates, real internal CLIs, real service onboarding flows. We record every step.
See the interview