go语言实现无限级分类
package main
import (
"fmt"
"gorm.io/gorm"
)
var GDB *gorm.DB
type T struct {
Id int32 `json:"id"`
Pid int32 `json:"pid" gorm:"index"`
Name string `json:"name" gorm:"size:255"`
}
type Tree struct {
T
Children []Tree `json:"children"`
}
func main() {
/**
创建表,并往表里插入测试数据
CREATE TABLE `t` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`pid` INT(10) NOT NULL DEFAULT '0' COMMENT '父级别id',
`name` VARCHAR(255) NOT NULL DEFAULT '0' COMMENT '名称' COLLATE 'utf8mb4_general_ci',
PRIMARY KEY (`id`) USING BTREE,
INDEX `pid` (`pid`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
INSERT INTO `t` (`id`, `pid`, `name`) VALUES (1, 0, '广东省');
INSERT INTO `t` (`id`, `pid`, `name`) VALUES (2, 1, '广州市');
INSERT INTO `t` (`id`, `pid`, `name`) VALUES (3, 2, '天河区');
INSERT INTO `t` (`id`, `pid`, `name`) VALUES (4, 2, '海珠区');
INSERT INTO `t` (`id`, `pid`, `name`) VALUES (5, 0, '福建省');
INSERT INTO `t` (`id`, `pid`, `name`) VALUES (6, 5, '厦门市');
*/
GDB = getDB()
var rows []T
GDB.Model(T{}).Find(&rows)
tree := ListToTree(rows, 0)
fmt.Println(tree)
}
func ListToTree(rows []T, pid int32) []Tree {
tree := make([]Tree, 0)
for _, row := range rows {
if row.Pid == pid {
t := Tree{
T: row,
}
t.Children = ListToTree(rows, row.Id)
tree = append(tree, t)
}
}
return tree
}
分类:
golang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!