go语言递归、分解处理任务

前言

Go 语言中,可以用递归来分解主任务。假设你要处理一个包含多个任务的列表,可以将每个任务递归地分解为更小的任务。

一、创建子任务

复制代码
    // 创建任务及子任务
    task1 := &Task{Name: "Task 1"}
    task2 := &Task{Name: "Task 2"}
    task3 := &Task{Name: "Task 3", SubTasks: []*Task{
        &Task{Name: "Subtask 3.1"},
        &Task{Name: "Subtask 3.2"},
    }}

&Task{} 语法用于创建一个 Task 结构体的指针。SubTasks 是一个 Task 指针的切片,用于存储子任务。这个切片包含了两个 Task 指针,分别指向子任务"Subtask 3.1"和"Subtask 3.2"。整个结构体表示一个任务及其所有子任务。

二、任务处理函数

复制代码
// 递归处理任务
func processTask(task *Task) {
    if task == nil {
        return
    }
    fmt.Println("Processing:", task.Name)
    for _, subTask := range task.SubTasks {
        processTask(subTask)
    }
}

在for循环中遍历函数列表,当列表中还有函数时就会继续执行任务处理函数。

三、函数测试

复制代码
package main

import "fmt"

type Task struct {
    Name     string
    SubTasks []*Task
}

// 递归处理任务
func processTask(task *Task) {
    if task == nil {
        return
    }
    fmt.Println("Processing:", task.Name)
    for _, subTask := range task.SubTasks {
        processTask(subTask)
    }
}

func main() {
    // 创建任务及子任务
    task1 := &Task{Name: "Task 1"}
    task2 := &Task{Name: "Task 2"}
    task3 := &Task{Name: "Task 3", SubTasks: []*Task{
        &Task{Name: "Subtask 3.1"},
        &Task{Name: "Subtask 3.2"},
    }}

    mainTask := &Task{Name: "Main Task", SubTasks: []*Task{task1, task2, task3}}

    // 递归处理主任务
    processTask(mainTask)
}
相关推荐
不败公爵几秒前
finsh_thread_entry这个线程是自动启动的
java·linux·服务器
Seven971 分钟前
Tomcat的事件监听机制:观察者模式
java
YaBingSec4 分钟前
玄机靶场-第三届-长城杯-初赛-SnakeBackdoor WP
java·运维·笔记·tomcat·ssh
雕刻刀4 分钟前
服务器模拟断网
linux·服务器·前端
zs宝来了5 分钟前
Vite 构建原理:ESBuild 与模块热更新
前端·javascript·框架
2301_814809868 分钟前
实战分享Flutter Web 开发:解决跨域(CORS)问题的终极指南
前端·flutter
IT利刃出鞘12 分钟前
Spring工具类--AnnotationUtils的使用
java·spring
ayqy贾杰1 小时前
GPT-5.5+Codex全自动搓出macOS游戏,创作链路首次真正连续
前端·面试·游戏开发
我喜欢山,也喜欢海1 小时前
Java和go在并发上的表现为什么不一样
java·python·golang
geovindu2 小时前
go: Flyweight Pattern
开发语言·设计模式·golang·享元模式