How to Build a CLI Task Manager in Go

Cli
Build a basic Go CLI task manager using the flag package to handle add and list commands.

Initialize a new Go module, define a task struct, and implement add/list commands using the flag package.

package main

import (
	"flag"
	"fmt"
	"os"
)

type Task struct {
	Title string
	Done  bool
}

var tasks []Task

func main() {
	addCmd := flag.NewFlagSet("add", flag.ExitOnError)
	listCmd := flag.NewFlagSet("list", flag.ExitOnError)

	if len(os.Args) < 2 {
		fmt.Println("Usage: task <add|list> [args]")
		os.Exit(1)
	}

	switch os.Args[1] {
	case "add":
		addCmd.Parse(os.Args[2:])
		if addCmd.NArg() < 1 {
			fmt.Println("Usage: task add <title>")
			os.Exit(1)
		}
		tasks = append(tasks, Task{Title: addCmd.Arg(0), Done: false})
		fmt.Println("Task added")
	case "list":
		listCmd.Parse(os.Args[2:])
		for i, t := range tasks {
			status := "[ ]"
			if t.Done {
				status = "[x]"
			}
			fmt.Printf("%d. %s %s\n", i+1, status, t.Title)
		}
	default:
		fmt.Println("Unknown command")
		os.Exit(1)
	}
}