明白了,以下是删除当前节点及其所有子节点的具体代码:
type NginxResourceGroup struct {
ID int
Pid int
Name string
}
func deleteNode(db *gorm.DB, nodeID int) error {
// 查询待删除节点是否存在
var node NginxResourceGroup
if err := db.Where("ID = ?", nodeID).First(&node).Error; err != nil {
return errors.New("待删除节点不存在")
}
// 删除当前节点及其所有子节点
if err := deleteRecursive(db, nodeID); err != nil {
return err
}
return nil
}
func deleteRecursive(db *gorm.DB, nodeID int) error {
var nodes []NginxResourceGroup
// 查询当前节点的所有子节点
if err := db.Where("Pid = ?", nodeID).Find(&nodes).Error; err != nil {
return err
}
for _, n := range nodes {
if err := deleteRecursive(db, n.ID); err != nil { // 递归删除子节点的子节点
return err
}
if err := db.Delete(&n).Error; err != nil { // 删除当前节点及其子节点记录
return err
}
}
return nil
}
上述代码中,在 deleteNode() 函数中调用了 deleteRecursive() 函数来递归地删除当前节点及其所有子孙节点。deleteRecursive() 函数首先查询并获取当前节点的所有子节点,然后逐个进行递归删除,最后再删除当前节点本身。这样可以保证整个树状结构的相关记录都会被删除。
请注意,上述代码是基于 GORM 的使用示例,你可能需要根据自己的数据库结构和库选择进行适当修改。
内容由零声教学AI助手提供,问题来源于学员提问




