package main
import (
"fmt"
"os"
"os/exec"
"github.com/eiannone/keyboard"
)
type Task struct {
Name string
Description string
Command string
}
// ANSI 颜色代码
const (
Reset = "\033[0m"
Red = "\033[31m"
Green = "\033[32m"
Yellow = "\033[33m"
Blue = "\033[34m"
Magenta = "\033[35m"
Cyan = "\033[36m"
White = "\033[37m"
// 高亮背景
HighlightBg = "\033[43m" // 黄色背景
)
func main() {
// 定义任务列表
tasks := []Task{
{Name: "清理缓存", Description: "清理系统临时文件", Command: "echo 清理缓存"},
{Name: "检查更新", Description: "检查系统更新", Command: "echo 检查更新"},
{Name: "重启服务", Description: "重启核心服务", Command: "echo 重启服务"},
{Name: "退出", Description: "退出程序", Command: "exit"},
}
selected := 0
running := true
// 初始化键盘监听
if err := keyboard.Open(); err != nil {
fmt.Println("键盘初始化失败:", err)
return
}
defer keyboard.Close()
for running {
// 清屏
cmd := exec.Command("clear") // Windows 系统可以用 "cls"
cmd.Stdout = os.Stdout
cmd.Run()
// 显示菜单
fmt.Printf("%s使用上下键选择任务,回车执行:%s\n\n", Cyan, Reset)
for i, task := range tasks {
if i == selected {
// 选中的任务使用黄色背景和白色文字
fmt.Printf("%s%s> [%d] %s - %s%s\n",
HighlightBg, White, i+1, task.Name, task.Description, Reset)
} else {
// 未选中的任务使用绿色文字
fmt.Printf("%s [%d] %s - %s%s\n",
Green, i+1, task.Name, task.Description, Reset)
}
}
// 获取键盘输入
char, key, err := keyboard.GetKey()
if err != nil {
fmt.Println("键盘输入错误:", err)
return
}
// 处理键盘输入
switch {
case key == keyboard.KeyArrowUp && selected > 0:
selected--
case key == keyboard.KeyArrowDown && selected < len(tasks)-1:
selected++
case key == keyboard.KeyEnter:
executeTask(tasks[selected])
if tasks[selected].Command == "exit" {
running = false
}
case char == 'q' || key == keyboard.KeyEsc:
running = false
}
}
}
func executeTask(task Task) {
// 清屏
cmd := exec.Command("clear")
cmd.Stdout = os.Stdout
cmd.Run()
fmt.Printf("%s\n执行任务: %s%s\n", Yellow, task.Name, Reset)
if task.Command != "exit" {
// 执行系统命令
cmd := exec.Command("bash", "-c", task.Command)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
fmt.Printf("%s执行失败: %v%s\n", Red, err, Reset)
}
// 等待用户按任意键继续
fmt.Printf("%s\n按任意键继续...%s", Cyan, Reset)
keyboard.GetKey()
}
}
显示效果:
使用上下键选择任务,回车执行:(青色)
> [1] 清理缓存 - 清理系统临时文件 (黄色背景+白色文字)
[2] 检查更新 - 检查系统更新 (绿色文字)
[3] 重启服务 - 重启核心服务 (绿色文字)
[4] 退出 - 退出程序 (绿色文字)