前言
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)
}