charm/bubbletea para Go: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

charm/bubbletea para Go: guia completo com exemplos

1. O que é e para que serve

Bubble Tea é um framework poderoso, elegante e produtivo para criar interfaces de usuário no terminal (TUI) usando a linguagem Go. Inspirado pela arquitetura de programação funcional Elm, ele oferece um modelo simples, mas incrivelmente flexível, baseado em três conceitos-chave: Model (estado), Update (função de atualização) e View (função de exibição).

Por que usar o Bubble Tea? Se você está cansado de utilitários de linha de comando chatos e quer criar aplicativos interativos, bonitos e responsivos diretamente no terminal, esta é a ferramenta certa. O Bubble Tea permite construir desde formulários simples e listas de seleção até gerenciadores de arquivos complexos, players de música, jogos e painéis de monitoramento. Ele cuida de todo o trabalho de baixo nível com o terminal (processamento de sinais, controle de cursor, renderização), permitindo que o desenvolvedor se concentre na lógica da aplicação.

A biblioteca faz parte do ecossistema Charm, que também inclui outras ferramentas úteis, como Bubbles (um conjunto de componentes prontos, como campos de texto, spinners e barras de progresso) e Lip Gloss (uma biblioteca para estilizar a saída). Juntos, eles formam um kit completo para criar aplicações TUI profissionais.

2. Instalação

A instalação da biblioteca é feita da forma padrão para Go:

go get github.com/charmbracelet/bubbletea@latest

Para usar os componentes prontos (widgets), também é recomendado instalar o pacote bubbles:

go get github.com/charmbracelet/bubbles@latest

E para estilização:

go get github.com/charmbracelet/lipgloss@latest

3. Início rápido — exemplo mínimo funcional

Crie um arquivo main.go e cole o código a seguir. Este aplicativo exibirá o número de teclas pressionadas. Pressione Ctrl+C para sair.

package main

import (
    "fmt"
    "os"
    tea "github.com/charmbracelet/bubbletea"
)

// 1. Model (Modelo) — armazena o estado da aplicação.
type model struct {
    count int
}

// 2. Init (Inicialização) — retorna o comando inicial (geralmente nil).
func (m model) Init() tea.Cmd {
    return nil
}

// 3. Update (Atualização) — processa as mensagens recebidas e retorna um novo modelo e um comando.
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
    switch msg := msg.(type) {
    case tea.KeyMsg:
        switch msg.String() {
        case "ctrl+c":
            return m, tea.Quit // Comando para sair
        default:
            m.count++
            return m, nil
        }
    }
    return m, nil
}

// 4. View (Visualização) — retorna a string que será exibida no terminal.
func (m model) View() string {
    return fmt.Sprintf("Teclas pressionadas: %d\n\nPressione qualquer tecla. Para sair, pressione Ctrl+C.", m.count)
}

func main() {
    p := tea.NewProgram(model{})
    if _, err := p.Run(); err != nil {
        fmt.Printf("Erro: %v", err)
        os.Exit(1)
    }
}

Execute a aplicação:

go run main.go

4. Métodos e tipos principais

No Bubble Tea, os elementos-chave são interfaces e funções, não classes. Vamos ver os 8 principais.

4.1. tea.NewProgram

Assinatura: func NewProgram(

Recommendations