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

尹奉
• 阅读 243

我们将会创建一个简单的任务管理器 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 应用的实现。你可以根据需要添加更多的功能,如修改和删除任务,保存和加载任务等。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java目前可以通过以下几种方式进行定时任务
1、单机部署模式Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行。提供的功能比较单一,无法实现复杂的调度任务。ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响。
Karen110 Karen110
4年前
手把手教你用Python高仿一个任务管理器
大家好,我是Python进阶者。前言相信大家对任务管理器都不是很陌生了,CtrlAltDel即可打开,然后点击启动任务管理器,或者右击任务栏启动任务管理器即可启动任务管理器,启动之后界面如下:可以看出它列举出了一些重要的参数,比如进程数量,CPU使用率,物理内存,接下来我们就来一一列举出来。一、项目准备编辑器:sublimetext3模块:p
Stella981 Stella981
3年前
Android中AsyncTask的使用
原文https://blog.csdn.net/liuhe688/article/details/6532519在Android中实现异步任务机制有两种方式,Handler和AsyncTask。Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细
Wesley13 Wesley13
3年前
Java 并发编程:任务执行器 Executor 接口
任务执行器(Executor)是一个接口,位于java.util.concurrent包下,它的作用主要是为我们提供任务与执行机制(包括线程使用和调度细节)之间的解耦。比如我们定义了一个任务,我们是通过线程池来执行该任务,还是直接创线程来执行该任务呢?通过Executor就能为任务提供不同的执行机制。执行器的实现方式各种各样,常见的包括同步执行器、一对一执行
Stella981 Stella981
3年前
Eclipse RCP中多线程Job使用
在我们基于Eclipse的Java程序中,我们有很多种方式提供多任务的实现。熟悉Java的朋友立即会想到Java的Thread类,这是Java中使用最多的一个实现多任务的类。Eclipse平台为多任务处理提供了自己的API,那就是Job以及UIJob。Eclipse中的Job是对JavaThread的一个封装,为我们实现多任务提供了更方便的接口。以下是
Stella981 Stella981
3年前
RabbitMQ指南之二:工作队列(Work Queues)
在上一章的指南中,我们写了一个命名队列:生产者往该命名队列发送消息、消费从从该命名队列中消费消息。在本章中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务。工作队列(即任务队列)的主要思想是避免立即执行那些需要等他们执行完成的资源密集型任务。相反,我们将任务安排在稍后完成。我们将任务封装为消息并将其发送到队列,后台运行的工作进程将取出任务并执行完
Wesley13 Wesley13
3年前
Java并发新构件之Exchanger
    Exchanger是在两个任务之间交换对象的栅栏。当两个任务进入栅栏时,它们各自拥有一个对象,当它们离开时,它们都拥有对方的对象。Exchanger的典型应用场景是:一个任务在创建对象,而这些对象的生产代价很高,另一个任务在消费这些对象。通过这种方式,可以有更多的对象在被创建的同时被消费。    为了演示Exchanger类,我们将创建生产者
Stella981 Stella981
3年前
Jenkins入门之执行定时任务
通过前面我们讲解了如何通过Jenkins执行windowscommand,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下BuildNow按钮来执行任务构建的,有些时候我们可能需要定时执行一些脚本,Jenkins也是支持的,下面就讲一下如何使用Jenkins执行定时任务.我们新建一个自由式(FreeSt
Stella981 Stella981
3年前
Notification使用详解之三:通过服务更新进度通知&在Activity中监听服务进度
上次我们讲到如何实现一个可更新的进度通知,实现的方式是启动一个线程模拟一个下载任务,然后根据任务进度向UI线程消息队列发送进度消息,UI线程根据进度消息更新通知的UI界面。可是在实际应用中,我们一般会将上传、下载等比较耗时的后台任务以服务的形式运行,更新进度通知也是交由后台服务来完成的。不过有的时候,除了在通知里面显示进度信息,我们也要在Activit
并发编程-ExecutorCompletionService解析
1、简单介绍我们在并发编程中,目前大部分做法都是将任务添加到线程池中,并拿到Future对象,将其添加到集合中,等所有任务都添加到线程池后,在通过遍历Future集合,调用future.get()来获取每个任务的结果,这样可以使得先添加到线程池的任务先等待
马尚 马尚
1年前
使用Python进行简单的图像分类
图像分类是深度学习中的一个常见任务,它可以将图像分到预定义的类别中。本文将介绍如何使用Python和PyTorch库进行简单的图像分类任务。1.准备数据集首先,我们需要准备一个图像数据集,其中包含不同类别的图像。你可以使用自己的数据集,也可以使用公开的数据