Документация языка Go на русском
Язык программирования Go — это проект с открытым исходным кодом, созданный для повышения продуктивности программистов.
Go — выразительный, лаконичный, чистый и эффективный язык. Его механизмы параллелизма позволяют легко писать программы, максимально использующие возможности многоядерных и сетевых машин, а его новая система типов обеспечивает гибкое и модульное построение программ. Go быстро компилируется в машинный код, но при этом предоставляет удобство сборщика мусора и возможности динамического отражения (reflection). Это быстрый, статически типизированный, компилируемый язык, который ощущается как динамически типизированный интерпретируемый язык.
Начало работы
Установка Go ¶
Инструкции по загрузке и установке Go.
Учебник: Начало работы ¶
Краткое руководство «Hello, World» для начала работы. Узнайте немного о коде Go, инструментах, пакетах и модулях.
Учебник: Создание модуля ¶
Краткий учебник, знакомящий с функциями, обработкой ошибок, массивами, отображениями, модульным тестированием и компиляцией.
Учебник: Работа с многомодульными рабочими пространствами ¶
Основы создания и использования многомодульных рабочих пространств в Go. Они полезны для внесения изменений сразу в нескольких модулях.
Учебник: Разработка RESTful API с Go и Gin ¶
Основы написания RESTful веб-сервиса с использованием Go и веб-фреймворка Gin.
Учебник: Работа с дженериками ¶
Дженерики позволяют объявлять и использовать функции или типы, которые могут работать с любым из набора типов, предоставленных вызывающим кодом.
Учебник: Начало работы с фаззингом ¶
Фаззинг может генерировать входные данные для тестов, чтобы находить крайние случаи и проблемы безопасности, которые могли быть упущены.
Написание веб-приложений ¶
Создание простого веб-приложения.
Как писать код на Go ¶
Этот документ объясняет, как разработать простой набор пакетов Go внутри модуля, а также показывает, как
использовать команду
go для сборки и тестирования пакетов.
Тур по Go ¶
Интерактивное введение в Go, состоящее из четырёх разделов. Первый раздел охватывает базовый синтаксис и структуры данных; второй — методы и интерфейсы; третий — дженерики; а четвёртый — примитивы параллелизма Go. Каждый раздел завершается несколькими упражнениями, чтобы вы могли закрепить изученное. Вы можете пройти тур онлайн или установить его локально с помощью:
$ go install golang.org/x/website/tour@latest
Это установит бинарный файл tour в директорию bin вашего
GOPATH.
Использование и понимание Go
Эффективный Go ¶
Документ, содержащий советы по написанию чистого, идиоматического кода на Go. Обязателен к прочтению для всех начинающих программистов на Go. Он дополняет «Тур по Go» и спецификацию языка, которые рекомендуется изучить в первую очередь.
Часто задаваемые вопросы (FAQ) ¶
Ответы на распространённые вопросы о Go.
Плагины для редакторов и IDE ¶
Документ, обобщающий наиболее распространённые плагины и среды разработки (IDE), поддерживающие Go.
Диагностика ¶
Обзор инструментов и методик для диагностики проблем в программах на Go.
Руководство по сборщику мусора Go ¶
Документ, описывающий, как Go управляет памятью и как эффективно использовать эти возможности.
Управление зависимостями ¶
Когда ваш код использует внешние пакеты, эти пакеты (распространяемые как модули) становятся зависимостями.
Фаззинг ¶
Основная документация по фаззингу в Go.
Покрытие тестами для Go-приложений ¶
Основная документация по тестированию покрытия кода в приложениях на Go.
Оптимизация, основанная на профилировании ¶
Основная документация по оптимизации Go-приложений, основанной на профилировании (PGO).
Ссылки
Документация по пакетам ¶
Документация по стандартной библиотеке Go.
Документация по инструментам ¶
Документация по инструментам Go.
Спецификация языка ¶
Официальная спецификация языка Go.
Справочник по модулям Go ¶
Подробная документация по системе управления зависимостями Go.
Справка по файлу go.mod
Справка по директивам, которые могут содержаться в файле go.mod.
Модель памяти Go ¶
Документ, описывающий условия, при которых чтение переменной в одной горутине гарантированно наблюдает значения, записанные в эту же переменную в другой горутине.
Руководство по внесению вкладов ¶
Как участвовать в развитии Go.
История релизов ¶
Краткий обзор изменений между версиями Go.
Доступ к базам данных
Учебник: Доступ к реляционной базе данных ¶
Основы доступа к реляционной базе данных с использованием Go и пакета database/sql из
стандартной библиотеки.
Доступ к реляционным базам данных ¶
Обзор возможностей Go для работы с данными.
Открытие дескриптора базы данных ¶
Дескриптор базы данных используется для выполнения операций с базой. После открытия дескриптора с параметрами соединения он представляет собой пул соединений, управляемый от вашего имени.
Выполнение SQL-операций, не возвращающих данные ¶
Для операций SQL, которые могут изменять базу данных, включая INSERT, UPDATE и
DELETE, используются методы Exec.
Запрос данных ¶
Для операторов SELECT, возвращающих данные, используются методы Query или
QueryRow.
Использование подготовленных операторов ¶
Подготовленные операторы для повторного использования помогают ускорить выполнение кода, избегая необходимости каждый раз заново создавать оператор.
Выполнение транзакций ¶
sql.Tx предоставляет методы для работы с транзакциями, включая Commit и Rollback,
а также общие методы для операций с базой данных.
Отмена выполняющихся операций ¶
Используя context.Context, можно принудительно остановить выполнение функций и сервисов приложения и вернуть ошибку, если их обработка больше не требуется.
Управление соединениями ¶
В некоторых случаях может потребоваться тонкая настройка параметров пула соединений или явная работа с соединениями.
Предотвращение SQL-инъекций ¶
Риск SQL-инъекции можно снизить, передавая значения параметров SQL как аргументы функций пакета sql.
Разработка модулей
Разработка и публикация модулей ¶
Вы можете объединять связанные пакеты в модули и публиковать их для использования другими разработчиками. В этом разделе представлен обзор разработки и публикации модулей.
Процесс выпуска и версионирования модулей ¶
При разработке модулей для других разработчиков можно следовать рабочему процессу, который обеспечивает надежный и согласованный опыт использования модуля. Этот раздел описывает основные шаги такого процесса.
Управление исходным кодом модуля ¶
Следуя соглашениям о структуре репозитория, описанным в этом разделе, вы можете сделать свои модули удобнее для использования другими разработчиками.
Организация Go-модуля ¶
Как правильно организовать файлы и каталоги в типичном проекте на Go? В этом разделе обсуждаются общие варианты структуры проекта в зависимости от типа модуля.
Разработка крупного обновления версии ¶
Крупное обновление версии может быть очень разрушительным для пользователей модуля, так как включает несовместимые изменения и представляет собой новый модуль. Подробнее об этом в разделе.
Публикация модуля ¶
Чтобы сделать модуль доступным для других разработчиков, его публикуют, чтобы инструменты Go могли его
обнаружить. После публикации разработчики смогут разрешать зависимости от модуля с помощью команд, таких
как go get.
Нумерация версий модуля ¶
Разработчик модуля использует каждую часть номера версии для обозначения стабильности и обратной совместимости. Для каждого нового выпуска номер версии модуля отражает характер изменений по сравнению с предыдущим выпуском.
Доклады
Видеотур по Go ¶
Три вещи, которые делают Go быстрым, удобным и продуктивным: интерфейсы, рефлексия и конкуренция. В демонстрации создаётся простой веб-краулер.
Код, который растёт элегантно ¶
Одна из ключевых целей Go — адаптивность кода: легко начинать с простой конструкции и постепенно её расширять. Эндрю Герранд в этом докладе описывает сервер "чат-рулетка", который соединяет пары TCP-подключений, и показывает, как с помощью конкуренции, интерфейсов и стандартной библиотеки Go расширить функциональность веб-интерфейсом и другими возможностями.
Шаблоны конкурентности Go ¶
Конкурентность — ключ к проектированию высокопроизводительных сетевых сервисов. Примитивы Go (goroutines и каналы) позволяют просто и эффективно выражать параллельное выполнение. В докладе показывается, как решать сложные задачи конкурентности с помощью простого кода на Go.
Продвинутые шаблоны конкурентности Go ¶
Этот доклад углубляется в примитивы конкурентности Go, расширяя материал доклада "Шаблоны конкурентности Go".
Больше ¶
Смотрите сайт Go Talks и страницу в вики для большего количества докладов.
Codewalks
Пошаговые экскурсии по программам на Go.
- Функции первого класса в Go
- Генерация текста: алгоритм цепи Маркова
- Совместное использование памяти через коммуникацию
Язык
- JSON-RPC: история интерфейсов
- Синтаксис объявлений в Go
- Defer, Panic и Recover
- Шаблоны конкурентности Go: тайм-ауты и продолжение
- Срезы Go: использование и внутренняя структура
- GIF-декодер: упражнение с интерфейсами Go
- Обработка ошибок в Go
Пакеты
- JSON и Go — использование пакета json.
- Gobs of data — дизайн и использование пакета gob.
- Законы рефлексии — основы пакета reflect.
- Пакет image Go — основы пакета image.
- Пакет image/draw Go — основы пакета image/draw.
Модули
- Использование Go Modules — введение в модули в простом проекте.
- Переход на Go Modules — конвертация существующего проекта для использования модулей.
- Публикация Go Modules — как сделать новые версии модулей доступными для других.
- Go Modules: v2 и далее — создание и публикация крупных версий 2 и выше.
- Сохранение совместимости модулей — как поддерживать совместимость с предыдущими минорными/патч версиями.
Инструменты
- Команда Go — зачем она создана, что это такое и как использовать.
- Комментарии Go Doc — написание качественной документации.
- Отладка Go с GDB
- Data Race Detector — руководство по детектору гонок данных.
- Краткое руководство по ассемблеру Go
- C? Go? Cgo! — связывание с C-кодом через cgo.
- Профилирование программ Go — инструменты для измерения использования CPU и памяти.
- Введение в Go Race Detector — введение в детектор гонок.
- Gopls: язык-сервер Go — получение максимальной выгоды от редактора при работе с Go.
Вики
Go Wiki, поддерживаемая сообществом Go, содержит статьи о языке Go, инструментах и других ресурсах.
Смотрите страницу Learn на Wiki для дополнительных материалов по изучению Go.