← Назад на главную

Go - больше, чем просто язык программирования

Современная разработка масштабируемых и удобных в обслуживании приложений требует множества компонентов. Компиляция - лишь один из этапов этого процесса, и изначально Go задумывался не только как язык, но и как комплексная среда разработки. Утилита go - это набор инструментов для управления пакетами, тестирования, документирования и многого другого, выходящего за рамки простой компиляции кода. Рассмотрим ключевые компоненты этой экосистемы.

Управление пакетами: встроенная эффективность

Многие современные языки программирования используют диспетчеры пакетов, но лишь немногие имеют встроенную систему управления пакетами. В Go она является неотъемлемой частью, что обусловлено двумя причинами: повышение продуктивности разработчика и ускорение компиляции. Система управления пакетами разрабатывалась с учетом потребностей компилятора, что напрямую влияет на скорость сборки.

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

Изображение

Пакеты импортируются по именам. В данном случае fmt - это пакет с функциями форматирования. Все функции и переменные пакета доступны через префикс имени пакета, как в примере fmt.Println.

Импортируемые пакеты можно группировать, при этом они должны быть указаны в алфавитном порядке:

Изображение

После импорта пакета net/http к его функциям можно обращаться через префикс http.

Эта же система работает и с пакетами, не входящими в стандартную библиотеку Go.

Изображение

В данном примере "golang.org/x/net/html" - это внешний пакет, на который делается ссылка по URL. Это позволяет Go идентифицировать и загрузить необходимый ресурс.

Команда go get используется для загрузки пакетов. Она может принимать путь к конкретному пакету, например golang.org/x/net/html, или использовать команду go get ./... для обхода всего исходного кода и загрузки всех внешних пакетов, указанных в инструкциях import.

Go поддерживает загрузку пакетов из различных систем управления версиями, включая Git, Mercurial, SVN и Bazaar. При загрузке из Git, Go использует последнюю версию в ветке по умолчанию.

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

Тестирование: надежность и качество кода

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

Процесс создания и выполнения тестов достаточно прост.

package main

import "testing"

func TestName(t *testing.T) {
name := getName()
if name != "World!" {
t.Error("Response from getName is unexpected value")
}
}

При запуске команды go test, Go выполняет все функции, начинающиеся с префикса Test, в данном случае TestName, и передает им структуру testing.T. Эта структура содержит полезные функции, например, для вывода сообщений об ошибках.

Вывод команды go test выглядит следующим образом:

    PASS
ok go/hello 0.012s

Если функция getName вернет строку, отличную от "World!", результат будет другим:

    --- FAIL: TestName (0.00 seconds)
hello_test.go:9: Response from getName is unexpected value
FAIL
exit status 1
FAIL go/hello 0.010s

Go предоставляет все необходимые инструменты для тестирования. Для расширения функциональности можно использовать внешние пакеты, например, для поддержки разработки, основанной на поведении (BDD).

Охват кода: оценка качества тестирования

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

В версии Go 1.5 команды для получения оценки охвата тестами стали частью ядра языка.

Для получения оценки охвата тестами выполните команду:

go test -cover
Эта команда выведет информацию об охвате тестами вместе с результатами выполнения тестов.

    PASS
Coverage: 33.3% of statements
ok go/hello 0.011s

Информацию об охвате можно экспортировать в файлы для использования другими инструментами или отображать с помощью встроенных средств.

Форматирование кода: единый стиль

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

На странице http://golang.org/doc/effective_go.html можно ознакомиться с руководством Effective Go, описывающим стили и соглашения, используемые в Go-сообществе.

Для автоматического форматирования кода можно запустить команду go fmt в корневом каталоге пакета.

Многие редакторы поддерживают автоматическое форматирование кода через встроенные средства или дополнительные пакеты.

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

Спасибо за ваше время и внимание! Ваша поддержка очень важна для меня! Если вам понравилась статья, пожалуйста, поставьте лайк этой статье на моем канале Дзен

Подпишитесь на мой Телеграм-канал, чтобы быть в курсе новых статей.

Удачи!