Go (также известный как Golang) — это статически типизированный язык программирования с открытым исходным кодом. Первоначально он был разработан компанией Google. Среди ключевых особенностей Go можно выделить простоту, высокую производительность, читаемость и эффективность.
Как и у любого другого известного языка программирования, стандартная библиотека Go предлагает богатый набор пакетов. Однако мы также можем расширить функциональность, добавив сторонние пакеты. Это руководство продемонстрирует импорт пакетов и их интеграцию в ваши проекты на Go.
Предварительные требования
Для выполнения этого руководства вам понадобятся следующие компоненты:
- Правильно настроенный сервер Ubuntu. Узнайте больше о настройке собственного сервера Ubuntu на CloudSigma.
- Среда программирования Go. Вы можете использовать это руководство по установке Go на Ubuntu.
- Современный текстовый редактор, например, Vim, Sublime Text, Atom, Visual Studio Code, Brackets и т. д. В этом руководстве будет использоваться Visual Studio Code .
Шаг 1 – Установка Go
Мы уже обсуждали установку основного языка программирования Go на Ubuntu 20.04. Однако существует более простой альтернативный метод: g (легковесный менеджер версий Go).
Причина, по которой мы собираемся использовать g , заключается в том, что ни одна из версий Go, доступных в репозиториях пакетов Ubuntu или snap, не является последней доступной версией Go (v1.18 на момент написания этого руководства). Всегда рекомендуется использовать последнюю доступную версию любого пакета языка программирования.
Следующая команда запустит g скрипт установки:
|
1 |
wget -qO- https://git.io/g-install | sh -s |


Чтобы изменения вступили в силу, вам необходимо перезапустить сессию оболочки. После перезапуска проверьте установку:
|
1 |
go version |
|
1 |
which go |

После установки Go также рекомендуется установить gopls . Это официальный языковой сервер Go. Он совместим со многими текстовыми редакторами, такими как VS Code, Vim, Emacs, Sublime Text, Atom и многими другими. Выполните следующую команду:
|
1 |
go install golang.org/x/tools/gopls@latest |
Наша среда программирования Go готова.
Шаг 2 – Создание тестового скрипта Go
Весь код, продемонстрированный в этом руководстве, поместится в один скрипт Go. Создайте тестовый скрипт Go:
|
1 |
touch practice.go |
После внесения изменений в скрипт мы можем запустить его с помощью следующей команды Go:
|
1 |
go run practice.go |
Здесь компилятор Go запустит код в режиме интерпретатора.
Шаг 3 – Использование пакетов стандартной библиотеки
Go поставляется с огромной стандартной библиотекой. Она состоит из множества пакетов, например:
- fmt: реализует форматированный ввод-вывод с функциями, аналогичными функциям в C ( printf и scanf ).
- http: этот пакет предоставляет функции для создания веб-сервисов, отправки и получения данных по протоколу http и т. д.
Чтобы включить любой пакет в проект Go, его необходимо импортировать с помощью инструкции import . Инструкция объявляется ключевым словом import вместе с именами пакетов. Например, для импорта math/rand инструкция импорта будет выглядеть следующим образом:
|
1 |
import "math/rand" |
Следующий код реализует различные функции из пакета math/rand :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import "math/rand" func main() { for i := 0; i < 10; i++ { println(rand.Intn(25)) } } |
Этот код демонстрирует простой цикл for, который выводит на экран 10 случайных целых чисел (от 0 до 24). Здесь:
- rand.Int() : этот вызов функции возвращает случайное целое число.
- rand.Intn() : работает аналогично rand.Int() , но принимает параметр, определяющий диапазон для случайных целых чисел (от 0 до указанного числа).
Затем запустите код:
|
1 |
go run practice.go |
Вывод будет выглядеть следующим образом:

Обратите внимание, что вывод будет абсолютно одинаковым, так как начальное значение (seed) для генератора случайных чисел по умолчанию является фиксированным. Такова природа генератора псевдослучайных чисел. Вы можете узнать больше о random seed здесь.
Step 4 – Импорт нескольких пакетов
Более крупные и сложные проекты требуют использования нескольких пакетов. Как импортировать их в код на Go? Один из допустимых вариантов — использовать отдельные инструкции импорта для каждого импортируемого пакета. Однако этот подход неэффективен по сравнению со следующей структурой импорта:
|
1 2 3 4 5 6 7 8 9 |
import ( "<package_1>" "<package_2>" "<package_3>" ) |
Здесь одна инструкция import объединяет несколько пакетов одновременно. Это сокращает объем кода, который необходимо написать, и улучшает читаемость.
Следующий код демонстрирует эту возможность в действии:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt.Printf("%d) %d\n", i, rand.Intn(25)) } } |
Запустите код:
|
1 |
go run practice.go |
Вывод будет выглядеть примерно так:

Step 5 – Установка дополнительных библиотек Go
Стандартная библиотека Go поставляется с множеством полезных пакетов. По своему назначению они являются универсальными. Это позволяет разработчикам создавать собственные пакеты на базе стандартной библиотеки для удовлетворения своих конкретных потребностей. Ознакомьтесь с официальной Go package database.
Что делать, если вам нужно использовать сторонний пакет Go? Go поставляется с go install командой ( go get устарела). Она позволяет загрузить любой сторонний пакет Go из Интернета.
Для демонстрации мы установим пакет cobra-cli . Следующая команда Go загрузит и установит необходимые файлы и интегрирует пакет в систему библиотек Go:
|
1 |
go install github.com/spf13/cobra-cli@latest |

Исполняемый файл cobra-cli должен находиться по следующему пути:
|
1 |
ls -l $GOPATH/bin |

Другие файлы пакета должны находиться по следующему пути:
|
1 |
ls -l $GOPATH/pkg/mod/github.com/spf13 |

Начиная с Go v1.11, модули Go определяют версию импортируемого пакета. Подробно это описано здесь: Go Modules GitHub.
Step 6 – Псевдонимы пакетов
В различных ситуациях вы можете столкнуться с конфликтом имен между локальными и импортируемыми пакетами. В таких случаях использование псевдонимов (aliasing) позволяет разрешить коллизию. Структура псевдонимов выглядит примерно так:
|
1 |
import <alias> "import_package_name" |
Давайте изменим нашу простую программу на Go, чтобы использовать fmt_alias в качестве псевдонима для пакета fmt :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( fmt_alias "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt_alias.Printf("%d) %d\n", i, rand.Intn(25)) } } |
Обратите внимание, что вместо использования fmt.Printf() , мы используем псевдоним пакета fmt_alias.Printf() .
Однако Go не очень приветствует псевдонимы. Если вы используете псевдонимы для предотвращения конфликта имен импорта, рекомендуется задавать псевдоним для наиболее локального или специфичного для проекта импорта. Например, если вы хотите использовать как локальный пакет strings , так и системный пакет strings , то вам следует задать псевдоним для локального пакета, а не для системного.
Лучшая практика — изначально избегать конфликтов имен.
Step 7 – Форматирование импорта
Мы научились объявлять все импорты с помощью одной инструкции import . Что если у вас несколько импортов? Например:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import ( "fmt" "os" "github.com/example/foo" "github.com/example/bar" "math/rand" "github.com/abc/pqr/xyz" ) |
Форматирование импорта сортирует пакеты в определенном порядке, улучшая согласованность кода. Поскольку оно сортирует только порядок импорта, это также предотвращает случайные коммиты. Это также предотвращает ненужные изменения в коде и запутанные обзоры кода.
Большинство современных редакторов форматируют импорт автоматически. В качестве альтернативы они поддерживают goimports. В индустрии принято использовать goimports вместо ручной сортировки импорта. Кроме того, goimports также отражает изменения стиля в коде.
Вот как может выглядеть блок import после применения goimports :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import ( fmt_alias "fmt" "math/rand" "os" "github.com/example/foo" "github.com/example/bar" "github.com/abc/pqr/xyz" ) |
Заметили какую-нибудь закономерность?
- Все стандартные библиотеки группируются первыми.
- Группы разделены пустыми строками, что улучшает читаемость кода.
Заключение
Импорт в Go — это мощная функция, позволяющая вызывать функции, не встроенные в Go. Хотя стандартная библиотека предлагает множество пакетов общего назначения, Go также поддерживает сторонние пакеты. В этом руководстве показано, как импортировать встроенные и сторонние пакеты Go.
В этом руководстве мы запускали наши программы на Go с помощью интерпретатора. Однако вы можете скомпилировать код в автономные исполняемые файлы для повышения производительности. Вы можете узнать больше о компиляции программ на Go здесь. Если вы хотите узнать, как развернуть веб-приложение на Go с помощью Nginx, ознакомьтесь с этим руководством. Кроме того, вы можете ознакомиться с нашим руководством, в котором показано, как писать собственные пакеты Go.
Вы разработчик на Go? CloudSigma предлагает поддержку Go API для бесшовной интеграции с вашими проектами.
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.