package main
import("database/sql""fmt""log"_"github.com/go-sql-driver/mysql")// MenuItem represents a menu item in the databasetype MenuItem struct{
ID int64
ParentID sql.NullInt64
Title string
Level int
Sort int
Name string
Icon string
Hidden int
Children []*MenuItem
}funcmain(){// Connect to the MySQL database
db, err := sql.Open("mysql","root:root@tcp(localhost:3306)/mall")if err !=nil{
log.Fatal(err)}defer db.Close()// Fetch all menu items from the database
menuItems, err :=getMenuItems(db)if err !=nil{
log.Fatal(err)}// Build the menu tree
menuTree :=buildMenuTree(menuItems,0)// Print the menu treeprintMenuTree(menuTree,0)}funcgetMenuItems(db *sql.DB)([]*MenuItem,error){
rows, err := db.Query("SELECT id, parent_id, title, level, sort, name, icon, hidden FROM ums_menu")if err !=nil{returnnil, err
}defer rows.Close()var menuItems []*MenuItem
for rows.Next(){var menuItem MenuItem
err := rows.Scan(&menuItem.ID,&menuItem.ParentID,&menuItem.Title,&menuItem.Level,&menuItem.Sort,&menuItem.Name,&menuItem.Icon,&menuItem.Hidden)if err !=nil{returnnil, err
}
menuItems =append(menuItems,&menuItem)}return menuItems,nil}funcbuildMenuTree(menuItems []*MenuItem, parentID int64)[]*MenuItem {var result []*MenuItem
for_, item :=range menuItems {if item.ParentID.Int64 == parentID {
children :=buildMenuTree(menuItems, item.ID)
item.Children = children
result =append(result, item)}}return result
}funcprintMenuTree(menuItems []*MenuItem, level int){for_, item :=range menuItems {// Add indentation based on the level
fmt.Printf("%s%s\n",getIndentation(level), item.Title)// Recursively print child itemsprintMenuTree(item.Children, level+1)}}funcgetIndentation(level int)string{return fmt.Sprintf("%*s", level*2,"")}