【go语言】4.2.3 实现一个简单的任务管理器 CLI 应用

84 阅读2分钟

我们将会创建一个简单的任务管理器 CLI 应用。这个应用将会有以下几个功能:

  1. 添加一个新的任务
  2. 列出所有的任务
  3. 完成一个任务

首先,我们需要定义我们的任务 Task

type Task struct {
	ID     int    `json:"id"`
	Name   string `json:"name"`
	Status string `json:"status"`
}

然后,我们需要使用 flag 包来解析命令行参数,并根据参数执行相应的操作。我们将为每个操作定义一个单独的函数。

我们还需要一个方式来存储任务。在这个简单的例子中,我们将使用一个切片来存储任务。在实际的应用中,你可能需要使用数据库或其他更持久的存储方式。

var tasks = []Task{}
var id = 1

添加一个新的任务

我们首先定义一个函数 addTask 来添加一个新的任务:

func addTask(name string) {
	tasks = append(tasks, Task{ID: id, Name: name, Status: "In Progress"})
	id++
}

然后,我们可以使用 flag 包的 StringVar 函数来定义一个 -add 标志:

var add string
flag.StringVar(&add, "add", "", "Add a new task")

在 main 函数中,我们检查 -add 标志是否被设置,如果是,我们调用 addTask 函数:

if add != "" {
	addTask(add)
}

列出所有的任务

我们定义一个函数 listTasks 来列出所有的任务:

func listTasks() {
	for _, t := range tasks {
		fmt.Printf("%d. %s [%s]\n", t.ID, t.Name, t.Status)
	}
}

然后,我们可以使用 flag 包的 BoolVar 函数来定义一个 -list 标志:

var list bool
flag.BoolVar(&list, "list", false, "List all tasks")

在 main 函数中,我们检查 -list 标志是否被设置,如果是,我们调用 listTasks 函数:

if list {
	listTasks()
}

完成一个任务

我们定义一个函数 completeTask 来完成一个任务:

func completeTask(id int) {
	for i, t := range tasks {
		if t.ID == id {
			tasks[i].Status = "Done"
			break
		}
	}
}

然后,我们可以使用 flag 包的 IntVar 函数来定义一个 -complete 标志:

var complete int
flag.IntVar(&complete, "complete", 0, "Complete a task")

在 main 函数中,我们检查 -complete 标志是否被设置,如果是,我们调用 completeTask 函数:

if complete != 0 {
	completeTask(complete)
}

最后,我们需要在 main 函数的开始调用 flag.Parse 函数来解析命令行参数:

func main() {
	flag.Parse()
	// ...
}

这就是一个简单的任务管理器 CLI 应用的实现。你可以根据需要添加更多的功能,如修改和删除任务,保存和加载任务等。 推荐阅读:

mp.weixin.qq.com/s/dV2JzXfgj…

mp.weixin.qq.com/s/an83QZOWX…

file