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)
}
相关推荐
爱勇宝25 分钟前
小红花成长新版:模板来了,鼓励也更容易开始
前端·后端·程序员
竹林8181 小时前
Solana前端开发:我在一个NFT铸造页面上被@solana/web3.js的Connection和Transaction签名坑了两天
前端
冬奇Lab1 小时前
每日一个开源项目(第144篇):ai-website-cloner-template - 一条命令、多 Agent 并行,把任意网站逆向成 Next.js 代码
前端·人工智能·开源
玄玄子2 小时前
webpack publicPath作用原理
前端·webpack·程序员
HduSy2 小时前
帮 Claude Code 做了个菜单栏 Token 看板,聊聊里面的一些实现逻辑
前端
用户059540174462 小时前
用了6个月LangChain,才发现AI Agent的记忆存储一直有坑——写了23个Pytest用例才彻底修好
前端·css
奶油mm2 小时前
我偷偷把公司的祖传 jQuery 项目改成了 Vue3,CTO 没发现,但全组都来抄我的代码了
前端
用户2136610035722 小时前
Vue2非父子通信与动态组件
前端·vue.js
PedroQue992 小时前
Vite插件体系1.0.0:API稳定,生产就绪
前端·vite
用户059540174462 小时前
把LLM记忆测试从手工脚本换成Pytest参数化,回归时间从2小时降到10分钟
前端·css