Huh? — когда терминальные формы становятся простыми и элегантными

31 июл 2025
7,155
263
26
2 недели

Hey there! I'm Glenn!

Знакомо ли вам чувство, когда нужно добавить интерактивный опросник в консольное приложение, а стандартные средства языка выглядят слишком скучно или сложно? Команда Charmbracelet предлагает элегантное решение — библиотеку Huh?, которая превращает создание терминальных форм в удовольствие.

Что такое Huh?

Huh? — это Go-библиотека для построения интерактивных форм и диалогов прямо в терминале. Она сочетает простоту использования с мощными возможностями кастомизации и идеально подходит для:

  • CLI-утилит, требующих ввода пользователя
  • Интерактивных установщиков
  • Конфигураторов
  • Опросников и мини-приложений

Пример работы формы для заказа бургеров

5 причин попробовать Huh?

  1. Молниеносное создание форм Всего несколько строк кода — и у вас готовый интерактивный опросник:
var name string
huh.NewInput().
    Title("What's your name?").
    Value(&name).
    Run()
fmt.Printf("Hello, %s!", name)
  1. Богатый набор полей

    Реклама
    • Текстовый ввод (однострочный и многострочный)
    • Выпадающие списки (Select)
    • Множественный выбор (MultiSelect)
    • Чекбоксы (Confirm)
  2. Динамические формы Поля могут меняться в зависимости от предыдущих ответов пользователя:

huh.NewSelect[string]().
    TitleFunc(func() string {
        if country == "Russia" {
            return "Выберите регион"
        }
        return "Select region"
    }, &country)
  1. Доступность Встроенный режим для экранных читалок:
accessible := os.Getenv("ACCESSIBLE") != ""
form.WithAccessible(accessible)
  1. Интеграция с Bubble Tea Формы можно встраивать в более сложные TUI-приложения:
type Model struct {
    form *huh.Form // huh.Form это tea.Model
}

Как это работает под капотом?

Huh? построена на базе популярного фреймворка Bubble Tea и использует:

  • Компонентный подход (каждое поле — независимый модуль)
  • Генераторы опций для динамического обновления
  • Кэширование результатов
  • Гибкую систему валидации

Где это пригодится на практике?

  1. Конфигурация приложений — интерактивная настройка параметров
  2. CLI-инструменты — например, генераторы кода или шаблонов
  3. Мини-игры и викторины — создание простых текстовых квестов
  4. Админские утилиты — пошаговые мастера настройки серверов

Личный опыт

В моей практике подобные библиотеки особенно ценны, когда нужно быстро "прототипировать" взаимодействие с пользователем, не углубляясь в тонкости терминального ввода-вывода. Huh? выделяется среди аналогов продуманным API и приятным визуальным оформлением.

Стоит ли пробовать?

Если вы разрабатываете на Go и хотите:

  • Добавить интерактивность в CLI-приложения
  • Улучшить пользовательский опыт
  • Сэкономить время на рутинных задачах

— Huh? станет отличным выбором. Библиотека активно развивается, имеет хорошую документацию и уже используется в нескольких популярных проектах:

  • glyphs — пикер Unicode-символов
  • meteor — инструмент для conventional commits

Для начала работы достаточно:

go get github.com/charmbracelet/huh

А вы уже пробовали создавать формы в терминале? Какие библиотеки используете? Делитесь опытом в комментариях!

P.S. Кстати, разработчики явно обладают чувством юмора — попробуйте ввести имя "Frank" в демо-форме ;)

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.