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 {
Id int32 `json:"id"`
Pid int32 `json:"pid" gorm:"index"`
Name string `json:"name" gorm:"size:255"`
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{
Id: row.Id,
Pid: row.Pid,
Name: row.Name,
}
t.Children = ListToTree(rows, row.Id)
tree = append(tree, t)
}
}
return tree
}
标签:name,tree,分类,pid,json,gorm,无限,go,id
From: https://www.cnblogs.com/burndust/p/16593649.html