
Если вы пишете ботов на Gо, рекомендуем использовать нашу официальную библиотеку MAX Bot API. Расширенную версию библиотеки с примерами реализации смотрите [на GitHub](https://github.com/max-messenger/max-bot-api-client-go)

Вы можете воспользоваться Golang-фреймворком, чтобы с его помощью настраивать бота, обрабатывать сообщения, команды, callback-запросы и события. Изучить фреймворк подробнее можно в [репозитории на GitHub](https://github.com/max-messenger/maxbot/tree/main)

В этом разделе разберём, как подключить библиотеку MAX Bot API и эффективно использовать стандартные методы и утилиты, которыми она располагает

## Установка MAX Bot API

Чтобы установить библиотеку MAX Bot API, зарегистрируйте бота на платформе и подключитесь к API MAX — следуйте подсказкам [в разделе «Разработка сценариев: с кодом → API»](/docs/chatbots/bots-coding/prepare)

Все примеры в этом разделе написаны на Gо с переменными окружения

1\. Создайте новый проект `my-first-bot` и установите библиотеку. Для этого откройте терминал и выполните следующие команды:

# Создайте новую папку для исходного кода вашего модуля Go и перейдите в неё
mkdir my-first-bot
cd my-first-bot
# Запустите свой модуль с помощью команды go mod init.
go mod init first-max-bot

# Установите библиотеку для работы с MAX API на golang
go get github.com/max-messenger/max-bot-api-client-go

Команда `go mod init` создает файл `go.mod` для отслеживания зависимостей вашего кода. Пока что файл включает только имя вашего модуля и версию Go, которую поддерживает ваш код

2\. Теперь создайте файл, например, `bot.go`

Весь код в языке Go организуется в пакеты. Пакеты представляют удобную организацию разделения кода на отдельные части или модули. Модульность позволяет определять один раз пакет с нужной функциональностью и потом использовать его многократно в различных программах. Код пакета располагается в одном или нескольких файлах с расширением `go`. Для определения пакета применяется ключевое слово package. Поэтому наш файл `bot.go` будет иметь следующую структуру

package main
import "fmt"

func main() {
    fmt.Println("Hello Max Bot Go")
}

В данном случае пакет называется `main`. Определение пакета должно идти в начале файла

Есть два типа пакетов: исполняемые (`executable`) и библиотеки (`reusable`). Для создания исполняемых файлов пакет должен иметь имя `main`. Все остальные пакеты не являются исполняемыми. При этом пакет `main` должен содержать функцию `main`, которая является входной точкой в приложение

3\. Создайте экземпляр класса Bot и передайте [токен бота](/docs/chatbots/bots-create/manage#Получение%20токена%20бота) из его настроек (карточки) в конструктор через переменные окружения. Импортируйте в наш пакет `main` установленный [модуль](https://github.com/max-messenger/max-bot-api-client-go)

package main
import (
    "fmt"
    maxbot "github.com/max-messenger/max-bot-api-client-go"
)

func main() {
    api := maxbot.New(os.Getenv("TOKEN"))
    // Some methods demo:
    info, err := api.Bots.GetBot()
    fmt.Printf("Get me: %#v %#v", info, err)
}

Код выше создаёт объект `api`, передавая токен в его конструктор `New`. Мы рекомендуем передавать токен через переменные окружения, т. к. использовать токен в коде — плохая практика

4\. Запустите бота

# Передайте переменную окружения и запустите бота
TOKEN="" go run

## Работа с обновлениями

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

package main
import (
    "fmt"
    maxbot "github.com/max-messenger/max-bot-api-client-go"
)

func main() {
    api := maxbot.New(os.Getenv("TOKEN"))
    // Some methods demo:
    info, err := api.Bots.GetBot()
    fmt.Printf("Get me: %#v %#v", info, err)

    ctx, cancel := context.WithCancel(context.Background()) // создаём контекст
    go func() {
        exit := make(chan os.Signal)
        signal.Notify(exit, os.Kill, os.Interrupt)
        
 Если у вас возникли вопросы, [посмотрите раздел с ответами](/help)
