我们将会创建一个简单的任务管理器 CLI 应用。这个应用将会有以下几个功能:
- 添加一个新的任务
- 列出所有的任务
- 完成一个任务
首先,我们需要定义我们的任务 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 应用的实现。你可以根据需要添加更多的功能,如修改和删除任务,保存和加载任务等。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g