Импорт. Зависимости

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

Добавляем фреймворк echo

Для создания нашего web-сервиса, вместо стандартной библиотеки воспользуемся популярным web-фреймворком echo.

Добавим в секцию import фреймворк.

import (
    "github.com/labstack/echo"
    "net/http"
)

Если мы попробуем запустить наш файл командой go run src/app/main.go, то получим ошибку imported and not used: "app/vendor/github.com/labstack/echo" это связано с тем, что в Go, если мы что-то объявляем или импортируем, то мы обязаны это использовать. Все неиспользуемые импорты и переменные должны быть удалены из кода перед компиляцией. Это требование может показаться излишне строгим, однако оно помогает держать код "в чистоте".

Давайте перепишем функции handler и main c использованием фреймворка.

func handler(c echo.Context) error {
    return c.String(http.StatusOK, "hello world")
}

Вместо двух аргументов у нас теперь один с типом echo.Context. Данный тип позволит более удобно работать с HTTP запросом и ответом. Например, мы избавились от приведения типов.

Кроме того, функция обработчика теперь возвращает значение с типом error - это встроенный в язык интерфейс, в котором описан только один метод Error.

type error interface {
    Error() string
}
func main() {
    e := echo.New()
    e.GET("/", handler)
    e.Start(":8080")
}

Как видим, место стандартного http сервера занял фреймворк echo. В остальном код особо не изменился.

Попробуем снова запусить программу командой run. В результате увидим ошибку. main.go:4:2: cannot find package "github.com/labstack/echo" in any of: и далее список директорий, в которых компилятор пытался найти пакет.

GOPATH

Переменная окружения GOPATH определяет, где компилятор будет искать пакеты, указанные в секции import. Как и PATH, GOPATH может содержать несколько директорий, разделенных двоеточием (unix). Сначала пакет будет искаться в первой указанной директории, затем во второй и т.д.

Чтобы получить текущее значение GOPATH наберите go env GOPATH

Структура директорий указанных в GOPATH предопределена и содержит три основных поддиректории:

  • src - исходные коды
  • pkg - скомпилированные пакеты
  • bin - выполняемые файлы

Обычно в примерах, которые можно найти в интернет, для установки библиотек и зависимостей используется команда go get. Эта команда скачивает и устанавливает библиотеку в директорию, указанную в переменной окружения GOPATH.

Зависимости

Однако go get не умеет разрешать зависимости и учитывать версии пакетов как это делает composer.

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


Подробную информацию о GOPATH и папке vendor можно получить, набрав команду go help gopath

Для Go было написано много аналогов composer, однако на данный момент существует официальный экспериментальный инструмент dep. На нем мы и остановимся.

Чтобы установить dep наберите go get -u github.com/golang/dep/cmd/dep

Наберите dep init src/app для того, чтобы установить все зависимости для нашего web-сервиса.

В результате выполнения данной комманды в папке src/app будут созданы файлы Gopkg.lock, Gopkg.toml - аналоги composer.lock и composer.json А так же папка vendor, в которую скачаны необходимые пакеты.

Код находится в src/import_and_deps.

results matching ""

    No results matching ""