package main import ( "fmt" tea "github.com/charmbracelet/bubbletea" ) // model 定义应用的状态 type model struct { items []string // 列表数据 selectedIdx int // 当前选中的索引 } // Init 初始化模型,返回初始命令(这里不需要,返回 nil) func (m model) Init() tea.Cmd { return nil } // Update 处理用户输入和状态更新 func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { // 处理键盘输入 case tea.KeyMsg: switch msg.String() { // Tab 键:切换选中项(循环切换) case "tab": m.selectedIdx = (m.selectedIdx + 1) % len(m.items) // Ctrl+C 或 q 键:退出程序 case "ctrl+c", "q": return m, tea.Quit } } return m, nil } // View 渲染界面 func (m model) View() string { s := "网络接口列表(按 Tab 切换选择,按 q 退出)\n\n" // 遍历列表项,渲染每一项 for i, item := range m.items { // 标记当前选中的项 if i == m.selectedIdx { s += fmt.Sprintf("→ %s (选中)\n", item) } else { s += fmt.Sprintf(" %s\n", item) } } return s } func main() { // 初始化模型,设置列表数据 initialModel := model{ items: []string{"eth0", "eth1", "eth2", "eth3"}, selectedIdx: 0, // 默认选中第一个项 } // 启动 Bubble Tea 程序 p := tea.NewProgram(initialModel) if _, err := p.Run(); err != nil { fmt.Printf("程序运行出错: %v\n", err) } }