07 декабря 2023

🏃 Самоучитель по Go для начинающих. Часть 3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста

Энтузиаст-разработчик, автор статей по программированию. Сфера интересов - backend, web 3.0, кибербезопасность.
В этом уроке мы создадим и запустим простую программу на Go и на её примере познакомимся с организацией кода и основными функциями.
🏃 Самоучитель по Go для начинающих. Часть 3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста

Первая программа

Давайте напишем программу на Go, которая будет считывать имя пользователя и выводить сообщение с приветствием в консоль.

Первым делом создадим папку main/ и разместим там файл main.go , который будет содержать следующий код:

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", который содержится в стандартной библиотеке языка и предназначен для форматирования ввода-вывода:

main.go
        import "fmt" // импортировали пакет "fmt" для ввода-вывода

    

Для импорта несколько пакетов используют круглые скобки:

        import (
	"fmt"
	"strings"
)

    

Стандартная библиотека языка содержит большое количество пакетов для часто используемых задач. К примеру, "fmt" используется для форматирования ввода-вывода, "strings" – для работы со строками. Для скачивания сторонних пакетов существует специальная команда go get <название пакета>

Например, так можно скачать пакет lib/pq, содержащий драйвер для работы с СУБД PostgreSQL в Go:

        go get github.com/lib/pq

    
👨‍💻 Библиотека Go разработчика
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека Go разработчика»
🎓 Библиотека Go для собеса
Подтянуть свои знания по Go вы можете на нашем телеграм-канале «Библиотека Go для собеса»
🧩 Библиотека задач по Go
Интересные задачи по Go для практики можно найти на нашем телеграм-канале «Библиотека задач по Go»

Функции

Переходим к разбору строк, содержащих логику работы программы:

main.go
        // функция для входа в программу
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, в котором указаны все использованные модули и импортированные пакеты. Его содержимое будет выглядеть примерно так:

go.mod
        module github.com/<ваш_ник_в_github>/main

go 1.21.4 // здесь указана используемая в проекте версия go

    

В первой строке файла go.mod содержится название модуля, которое обычно дается по адресу расположения репозитория. Далее указывается минимальная совместимая версия Go, после чего следует список зависимостей. В нашем случае он пуст. Для его обновления нужно импортировать пакет с помощью команды go get , как это было показано ранее с lib/pq .

На практике часто используется команда go mod tidy, которая помимо импорта загружает отсутствующие зависимости и удаляет лишние.

Компиляция и выполнение программы

Язык Go является компилируемым, то есть написанный на нём исходный код преобразуется в машинный и затем записывается в файл, исполняемый компьютером.

Компиляция – это процесс преобразования программы, написанной на языке программирования высокого уровня, в исполняемый машинный код, который может быть выполнен компьютером.

Компиляция позволяет предупредить возможные ошибки и оптимизирует исходный код, что хорошо сказывается на производительности программы.

В Go есть два способа запуска программ:

  1. С помощью команды go run <имя_файла>.go . Она автоматически компилирует исполняемый файл, запускает его и сразу же удаляет. Этот способ используется в тех случаях, когда нужно разово запустить небольшой кусок кода и быстро получить результат.
  2. С помощью команды go build <имя_файла>.go . Она также занимается компиляцией и создает в директории исполняемый файл, способный запускаться на разных ОС. Особенностью этой команды является то, что она обеспечивает кроссплатформенность, так как позволяет контролировать, для какой ОС и архитектуры создается бинарный файл.

Скомпилируем нашу первую программу и посмотрим на полученный вывод. Для этого в консоли введем команду go build main.go, предварительно перейдя в ранее созданную директорию main/.

В результате в папке main/ должен появиться исполняемый файл main.exe (Windows) или main (Linux / MacOS). Чтобы его запустить, напишем в консоли main (Windows) или ./main (Linux / MacOS). В появившееся поле введем любую строку, пусть это будет user , после чего получим сообщение Hello, user, что свидетельствует об успешном выполнении кода.

Подведём итог

В этом уроке мы на примере простой программы разобрали концепции программирования и принципы организации кода на Go, а также научились создавать модули и компилировать исходный код.

В следующем уроке узнаем о составных частях любой программы – переменных, основных операциях и типах данных.

***

Содержание самоучителя

  1. Особенности и сфера применения Go, установка, настройка
  2. Ресурсы для изучения Go с нуля
  3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
  4. Переменные. Типы данных и их преобразования. Основные операторы
  5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
  6. Функции и аргументы. Области видимости. Рекурсия. Defer
  7. Массивы и слайсы. Append и сopy. Пакет slices
  8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
  9. Структуры и методы. Интерфейсы. Указатели. Основы ООП
  10. Наследование, абстракция, полиморфизм, инкапсуляция
  11. Обработка ошибок. Паника. Восстановление. Логирование

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ