Первая программа
Давайте напишем программу на Go, которая будет считывать имя пользователя и выводить сообщение с приветствием в консоль.
Первым делом создадим папку main/
и разместим там файл main.go
, который будет содержать следующий код:
Разбор программы
Организация кода
Наша программа начинается со строки package main
, которая определяет используемый пакет. В Go каждый программный файл должен быть частью какого-либо пакета.
При разработке на Go нужно обязательно создавать файл с объявлением главного пакета package main
и функции main()
, потому что именно она задает точку входа в программу.
Стоит помнить, что имя пакета должно соответствовать названию директории, в которой расположены его файлы. К примеру, если в папке application/
содержится файл server.go
, то название пакета в нем должно быть package application
.
В следующей строке происходит импорт пакета "fmt", который содержится в стандартной библиотеке языка и предназначен для форматирования ввода-вывода:
Для импорта несколько пакетов используют круглые скобки:
Стандартная библиотека языка содержит большое количество пакетов для часто используемых задач. К примеру, "fmt" используется для форматирования ввода-вывода, "strings" – для работы со строками. Для скачивания сторонних пакетов существует специальная команда go get <название пакета>
Например, так можно скачать пакет lib/pq
, содержащий драйвер для работы с СУБД PostgreSQL в Go:
Функции
Переходим к разбору строк, содержащих логику работы программы:
Здесь происходит объявление функции main()
с помощью ключевого слова func
и вызов функций fmt.Scan()
и fmt.Print()
из ранее импортированного пакета"fmt"
. Первая из них отвечает за ввод данных с клавиатуры, а вторая – за вывод сообщения с переданными данными в консоль.
Что такое функции в Go?
Функции – это подпрограммы, позволяющие структурировать, упрощать и адаптировать написанный код. Они принимают входные параметры (аргументы) и после их обработки выдают требуемый результат.
Подробнее мы разберем функции в отдельном разделе, на текущем этапе главное — понять, что они отвечают за выполнение определенных задач, в нашем случае за запуск программы, считывание данных с клавиатуры и их вывод в консоль.
Система модулей
Модули в контексте языка Go — это коллекции пакетов и файлов конфигурации, которые обеспечивают управление зависимостями и версионирование проекта, а также решают проблемы, характерные для старой системы GOPATH. Они позволяют разработчикам создавать структурированные проекты и управлять версиями используемых библиотек.
Давайте инициализируем модуль в ранее созданной директории main/
. Для этого нам понадобится команда go mod init
:
Теперь в папке main/
должен появиться файл go.mod
, в котором указаны все использованные модули и импортированные пакеты. Его содержимое будет выглядеть примерно так:
В первой строке файла go.mod
содержится название модуля, которое обычно дается по адресу расположения репозитория. Далее указывается минимальная совместимая версия Go, после чего следует список зависимостей. В нашем случае он пуст. Для его обновления нужно импортировать пакет с помощью команды go get
, как это было показано ранее с lib/pq
.
На практике часто используется команда go mod tidy
, которая помимо импорта загружает отсутствующие зависимости и удаляет лишние.
Компиляция и выполнение программы
Язык Go является компилируемым, то есть написанный на нём исходный код преобразуется в машинный и затем записывается в файл, исполняемый компьютером.
Компиляция – это процесс преобразования программы, написанной на языке программирования высокого уровня, в исполняемый машинный код, который может быть выполнен компьютером.
Компиляция позволяет предупредить возможные ошибки и оптимизирует исходный код, что хорошо сказывается на производительности программы.
В Go есть два способа запуска программ:
- С помощью команды
go run <имя_файла>.go
. Она автоматически компилирует исполняемый файл, запускает его и сразу же удаляет. Этот способ используется в тех случаях, когда нужно разово запустить небольшой кусок кода и быстро получить результат. - С помощью команды
go build <имя_файла>.go
. Она также занимается компиляцией и создает в директории исполняемый файл, способный запускаться на разных ОС. Особенностью этой команды является то, что она обеспечивает кроссплатформенность, так как позволяет контролировать, для какой ОС и архитектуры создается бинарный файл.
Скомпилируем нашу первую программу и посмотрим на полученный вывод. Для этого в консоли введем команду go build main.go
, предварительно перейдя в ранее созданную директорию main/
.
В результате в папке main/
должен появиться исполняемый файл main.exe
(Windows) или main
(Linux / MacOS). Чтобы его запустить, напишем в консоли main
(Windows) или ./main
(Linux / MacOS). В появившееся поле введем любую строку, пусть это будет user
, после чего получим сообщение Hello, user
, что свидетельствует об успешном выполнении кода.
Подведём итог
В этом уроке мы на примере простой программы разобрали концепции программирования и принципы организации кода на Go, а также научились создавать модули и компилировать исходный код.
В следующем уроке узнаем о составных частях любой программы – переменных, основных операциях и типах данных.
Содержание самоучителя
- Особенности и сфера применения Go, установка, настройка
- Ресурсы для изучения Go с нуля
- Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
- Переменные. Типы данных и их преобразования. Основные операторы
- Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
- Функции и аргументы. Области видимости. Рекурсия. Defer
- Массивы и слайсы. Append и сopy. Пакет slices
- Строки, руны, байты. Пакет strings. Хеш-таблица (map)
- Структуры и методы. Интерфейсы. Указатели. Основы ООП
- Наследование, абстракция, полиморфизм, инкапсуляция
- Обработка ошибок. Паника. Восстановление. Логирование
- Обобщенное программирование. Дженерики
- Работа с датой и временем. Пакет time
- Интерфейсы ввода-вывода. Буферизация. Работа с файлами. Пакеты io, bufio, os
- Конкурентность. Горутины. Каналы
- Тестирование кода и его виды. Table-driven подход. Параллельные тесты
- Основы сетевого программирования. Стек TCP/IP. Сокеты. Пакет net
Комментарии