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(
Também na biblioteca
gomock para Go: guia completo com exemplos práticos
Trabalho com XML em PHP: DOMDocument, SimpleXML e XPath
Geração de PDF em Java: visão geral das bibliotecas iText, Apache PDFBox, OpenPDF