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