Работа мечты в один клик 💼

💭Мечтаешь работать в Сбере, но не хочешь проходить десять кругов HR-собеседований? Теперь это проще, чем когда-либо!
💡AI-интервью за 15 минут – и ты уже на шаг ближе к своей новой работе.
Как получить оффер?
📌 Зарегистрируйся
📌 Пройди AI-интервью
📌 Получи обратную связь сразу же!
HR больше не тянут время – рекрутеры свяжутся с тобой в течение двух дней! 🚀
Реклама. ПАО СБЕРБАНК, ИНН 7707083893. Erid 2VtzquscAwp
Первая программа
Давайте напишем программу на Go, которая будет считывать имя пользователя и выводить сообщение с приветствием в консоль.
Первым делом создадим папку main/
и разместим там файл main.go
, который будет содержать следующий код:
package main // определили пакет main
import "fmt" // импортировали пакет fmt
// функция для входа в программу
func main() {
var name string // объявили переменную name типа string
fmt.Scan(&name) // считали переменную name с потока ввода
// функция Print() печатает сообщение в консоль
fmt.Print("Hello, ", name)
}
Разбор программы
Организация кода
Наша программа начинается со строки package main
, которая определяет используемый пакет. В Go каждый программный файл должен быть частью какого-либо пакета.
При разработке на Go нужно обязательно создавать файл с объявлением главного пакета package main
и функции main()
, потому что именно она задает точку входа в программу.
Стоит помнить, что имя пакета должно соответствовать названию директории, в которой расположены его файлы. К примеру, если в папке application/
содержится файл server.go
, то название пакета в нем должно быть package application
.
В следующей строке происходит импорт пакета "fmt", который содержится в стандартной библиотеке языка и предназначен для форматирования ввода-вывода:
import "fmt" // импортировали пакет "fmt" для ввода-вывода
Для импорта несколько пакетов используют круглые скобки:
import (
"fmt"
"strings"
)
Стандартная библиотека языка содержит большое количество пакетов для часто используемых задач. К примеру, "fmt" используется для форматирования ввода-вывода, "strings" – для работы со строками. Для скачивания сторонних пакетов существует специальная команда go get <название пакета>
Например, так можно скачать пакет lib/pq
, содержащий драйвер для работы с СУБД PostgreSQL в Go:
go get github.com/lib/pq
Функции
Переходим к разбору строк, содержащих логику работы программы:
// функция для входа в программу
func main() {
var name string // объявили переменную name типа string
fmt.Scan(&name) // считали переменную name с потока ввода
// функция Print() печатает сообщение в консоль
fmt.Print("Hello, ", name)
}
Здесь происходит объявление функции main()
с помощью ключевого слова func
и вызов функций fmt.Scan()
и fmt.Print()
из ранее импортированного пакета"fmt"
. Первая из них отвечает за ввод данных с клавиатуры, а вторая – за вывод сообщения с переданными данными в консоль.
Что такое функции в Go?
Функции – это подпрограммы, позволяющие структурировать, упрощать и адаптировать написанный код. Они принимают входные параметры (аргументы) и после их обработки выдают требуемый результат.
Подробнее мы разберем функции в отдельном разделе, на текущем этапе главное — понять, что они отвечают за выполнение определенных задач, в нашем случае за запуск программы, считывание данных с клавиатуры и их вывод в консоль.
Система модулей
Модули в контексте языка Go — это коллекции пакетов и файлов конфигурации, которые обеспечивают управление зависимостями и версионирование проекта, а также решают проблемы, характерные для старой системы GOPATH. Они позволяют разработчикам создавать структурированные проекты и управлять версиями используемых библиотек.
Давайте инициализируем модуль в ранее созданной директории main/
. Для этого нам понадобится команда go mod init
:
go mod init github.com/<ваш_ник_в_github>/main
Теперь в папке main/
должен появиться файл go.mod
, в котором указаны все использованные модули и импортированные пакеты. Его содержимое будет выглядеть примерно так:
module github.com/<ваш_ник_в_github>/main
go 1.21.4 // здесь указана используемая в проекте версия go
В первой строке файла 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
- Протокол HTTP. Создание HTTP-сервера и клиента. Пакет net/http
Комментарии
"Стоит помнить, что имя пакета должно соответствовать названию директории, в которой расположены его файлы." - это ошибка. Имена пакетов не обязаны никак соотносится с именами их содержащих файлов.
В статье говорится о соглашении именования пакетов, которое описано в документе Effective Go (ссылка: https://go.dev/doc/effective_go#package-names): "the package name is the base name of its source directory; the package in src/encoding/base64 is imported as "encoding/base64" but has name base64, not encoding_base64 and not encodingBase64". Имена пакетов действительно не обязаны никак соотносится с именами их содержащих файлов, но в статье об этом и не написано.