
👨💻 作者:Song
📅 更新时间:2025-11-04
🧩 关键词:Golang、Gin、Dashboard、终端艺术、系统信息、ASCII Banner
🌈 一、前言
平时我们运行 Go 项目时,控制台总是冷冰冰地输出:
[GIN-debug] Listening and serving HTTP on :8080
是不是太单调了?
既然我们是开发者,为什么不让项目“活”起来呢?
今天带你打造一个属于自己的——
💫 「Song Framework」启动仪表盘 💫
它能在项目启动时自动打印出:
- 精美的 ASCII 艺术 Logo
- 系统环境、端口、时间
- 数据库连接状态
- 注册的路由数量
- 每次一句「Song」风格的随机语录 ✨
✨ 二、效果展示
启动项目后,你将看到类似下面的输出:
─────────────────────────────────────────────── _____ ____ / ____| / __ \ | (___ ___ _ __ __ _ | | | |_ __ ___ ___ \___ \ / _ \| '_ \ / _' | | | | | '_ \ / _ \/ __| ____) | (_) | | | | (_| | | |__| | | | | __/\__ \ |_____/ \___/|_| |_|\__, | \____/|_| |_|\___||___/ __/ | |___/ ─────────────────────────────────────────────── 🔥 Song Framework v2.0 启动仪表盘 🌍 Environment : debug 📡 Listening : http://localhost:6001 🕒 Start Time : 2025-11-04 09:00:12 💾 Database : ✅ Connected (MySQL) 🧭 Routes : 6 total ─────────────────────────────────────────────── 🚀 Tip of the Day: 💡 Build fast, fail fast, learn faster. — Song ───────────────────────────────────────────────
是不是有点专业框架的感觉? 😎
🧩 三、核心原理
思路其实非常简单:
- 拦截项目启动前的时机(
main()中); - 使用 ANSI 颜色码和 ASCII Logo 打印美化文字;
- 获取系统信息,如:
- 当前环境(
gin.Mode()) - 路由数量(
len(r.Routes())) - MySQL 数据库连接状态(
sql.Ping())
- 当前环境(
- 打印一条“随机语录”,让每次启动都带点灵感。
🧱 四、完整代码
✅ 支持 MySQL 数据库状态检测
✅ 自动检测路由数量
✅ 内置多条随机语录
🔹 /utils/song_dashboard.go
package utils import ( "database/sql" "fmt" "github.com/gin-gonic/gin" "time" ) // 打印启动仪表盘 func PrintSongDashboard(r *gin.Engine) { // ANSI 颜色定义 cyan := "\033[36m" magenta := "\033[35m" yellow := "\033[33m" green := "\033[32m" red := "\033[31m" reset := "\033[0m" fmt.Println(cyan + "───────────────────────────────────────────────" + reset) fmt.Println(magenta + ` _____ ____ / ____| / __ \ | (___ ___ _ __ __ _ | | | |_ __ ___ ___ \___ \ / _ \| '_ \ / _' | | | | | '_ \ / _ \/ __| ____) | (_) | | | | (_| | | |__| | | | | __/\__ \ |_____/ \___/|_| |_|\__, | \____/|_| |_|\___||___/ __/ | |___/ ` + reset) fmt.Println(cyan + "───────────────────────────────────────────────" + reset) // 检查数据库连接 dbStatus := checkDBConnection() // 获取路由数量 routes := len(r.Routes()) // 系统信息 now := time.Now().Format("2006-01-02 15:04:05") fmt.Println(yellow + "🔥 Song Framework v2.0 启动仪表盘" + reset) fmt.Printf("%s🌍 Environment :%s %s\n", yellow, reset, gin.Mode()) fmt.Printf("%s📡 Listening :%s http://localhost:6001\n", yellow, reset) fmt.Printf("%s🕒 Start Time :%s %s\n", yellow, reset, now) if dbStatus { fmt.Printf("%s💾 Database :%s %s\n", yellow, reset, green+"✅ Connected (MySQL)"+reset) } else { fmt.Printf("%s💾 Database :%s %s\n", yellow, reset, red+"❌ Connection Failed"+reset) } fmt.Printf("%s🧭 Routes :%s %d total\n", yellow, reset, routes) fmt.Println(cyan + "───────────────────────────────────────────────" + reset) // 随机语录 quotes := []string{ "🎵 Keep coding, keep shining. — Song", "💡 Build fast, fail fast, learn faster. — Song", "🚀 Simplicity is the soul of efficiency. — Song", "🔥 Dreams + Discipline = Destiny. — Song", "🌈 Code your future, one line at a time. — Song", } index := time.Now().Unix() % int64(len(quotes)) fmt.Println(yellow + "🚀 Tip of the Day: " + reset + magenta + quotes[index] + reset) fmt.Println(cyan + "───────────────────────────────────────────────" + reset) } // 检测数据库连接状态 func checkDBConnection() bool { dsn := "root:123456@tcp(127.0.0.1:3306)/firstdb?charset=utf8mb4&parseTime=True&loc=Local" db, err := sql.Open("mysql", dsn) if err != nil { return false } defer db.Close() if err := db.Ping(); err != nil { return false } return true }
🔹 main.go
package main import ( "first-open/config" "first-open/models" "first-open/router" "first-open/utils" ) func main() { r := router.SetUpRouter() config.InitDB() // 自动建表 config.DB.AutoMigrate( &models.List{}, &models.User{}, ) // 打印 Song 启动仪表盘 utils.PrintSongDashboard(r) // 启动服务 r.Run(":6001") }
⚙️ 五、功能详解
| 功能模块 | 作用 | 文件 |
|---|---|---|
| ASCII Banner | 打印炫酷启动 Logo | utils/song_dashboard.go |
| 环境检测 | 输出 gin.Mode()(debug/release) |
同上 |
| 路由统计 | len(r.Routes()) 自动统计 |
同上 |
| 数据库检测 | Ping MySQL 连接状态 | 同上 |
| 启动语录 | 每次输出不同的激励语句 | 同上 |
🧠 六、扩展玩法
可以进一步拓展:
- 输出服务器信息
import "os" hostname, _ := os.Hostname() fmt.Println("🖥️ Hostname:", hostname) - 添加内存、CPU 占用率监控(结合 gopsutil)
- 在启动仪表盘下方显示接口列表
for _, route := range r.Routes() { fmt.Printf("%s%-10s%s → %s\n", green, route.Method, reset, route.Path) } - 导出到 Web UI 页面(React + Tailwind)可视化仪表盘
- 可生成前端仪表盘展示当前运行状态;
- 像 “GoAdmin” 那样酷。
🪄 七、总结
通过短短不到 100 行代码,我们就能为 Go 服务加上一块
带灵魂的启动面板。
这不仅仅是炫酷,更是开发者对「产品体验」的追求。
你的程序不只是运行,
它也可以「闪耀」。
🎁 八、彩蛋:未来计划
我正在准备一个项目模板 ——
「Song Framework」v2.0
计划集成:
- 🚀 模块化 Gin 架构
- 🔐 JWT 鉴权
- 🧭 Swagger API 文档
- 🧱 Tailwind + Vue3 前端模板
- 💾 MySQL + Redis 支持
- 🔥 自定义启动仪表盘
预览图(即将发布)👇
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于