Skip to content

Commit a72c34f

Browse files
authored
Merge pull request mouredev#4497 from hozlucas28/Solution-25-Go
#25 - Go
2 parents 4a167ab + 95dee60 commit a72c34f

File tree

1 file changed

+187
-0
lines changed

1 file changed

+187
-0
lines changed

Roadmap/25 - LOGS/go/hozlucas28.go

+187
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"errors"
6+
"fmt"
7+
"log"
8+
"os"
9+
"strings"
10+
"time"
11+
)
12+
13+
/* -------------------------------------------------------------------------- */
14+
/* CLASSES */
15+
/* -------------------------------------------------------------------------- */
16+
17+
/* ------------------------------ Task Manager ------------------------------ */
18+
19+
type Task struct {
20+
description string
21+
title string
22+
}
23+
24+
type TaskManager struct {
25+
tasks []Task
26+
shouldPrintLogs bool
27+
}
28+
29+
func (taskManager *TaskManager) addTask(newTask Task) error {
30+
var startTime time.Time = time.Now()
31+
32+
if taskManager.shouldPrintLogs {
33+
fmt.Println()
34+
log.Println("addTask (method) start execution...")
35+
}
36+
37+
taskManager.tasks = append(taskManager.tasks, newTask)
38+
39+
if taskManager.shouldPrintLogs {
40+
log.Println("addTask (method) ends execution!")
41+
log.Printf("addTask: %v\n", time.Since(startTime))
42+
}
43+
44+
return nil
45+
}
46+
47+
func (taskManager *TaskManager) deleteTaskByTitle(title string) error {
48+
var startTime time.Time = time.Now()
49+
50+
if taskManager.shouldPrintLogs {
51+
fmt.Println()
52+
log.Println("deleteTaskByTitle (method) start execution...")
53+
}
54+
55+
var uppercasedTitle string = strings.ToUpper(title)
56+
57+
var sanitizedTasks []Task
58+
59+
for _, task := range taskManager.tasks {
60+
var uppercasedTaskTitle string = strings.ToUpper(task.title)
61+
62+
if uppercasedTaskTitle != uppercasedTitle {
63+
sanitizedTasks = append(sanitizedTasks, task)
64+
65+
}
66+
}
67+
68+
if len(taskManager.tasks) == len(sanitizedTasks) {
69+
return errors.New("The task title was not found!")
70+
}
71+
72+
taskManager.tasks = sanitizedTasks
73+
74+
if taskManager.shouldPrintLogs {
75+
log.Printf("deleteTaskByTitle (method) ends execution!\n")
76+
log.Printf("deleteTaskByTitle: %v\n", time.Since(startTime))
77+
}
78+
79+
return nil
80+
}
81+
82+
func (taskManager *TaskManager) printTasks() {
83+
var startTime time.Time = time.Now()
84+
85+
if taskManager.shouldPrintLogs {
86+
log.Printf("printTasks (method) start execution...\n\n")
87+
}
88+
89+
for _, task := range taskManager.tasks {
90+
fmt.Printf("%+v\n", task)
91+
}
92+
93+
if taskManager.shouldPrintLogs {
94+
fmt.Println()
95+
log.Printf("printTasks (method) ends execution!\n")
96+
log.Printf("printTasks: %v", time.Since(startTime))
97+
}
98+
}
99+
100+
/* -------------------------------------------------------------------------- */
101+
/* MAIN */
102+
/* -------------------------------------------------------------------------- */
103+
104+
func main() {
105+
/*
106+
Logging...
107+
*/
108+
109+
fmt.Println("Logging...")
110+
111+
fmt.Printf("\nlog.Print(<MESSAGE>)...\n\n")
112+
113+
log.Print("logger message!")
114+
115+
fmt.Printf("\nlog.Printf(<MESSAGE>)...\n\n")
116+
117+
log.Printf("Formatted logger message!")
118+
119+
fmt.Printf("\nlog.Println(<MESSAGE>)...\n\n")
120+
121+
log.Println("Logger message with line break at the end!")
122+
123+
fmt.Println("\n# ---------------------------------------------------------------------------------- #")
124+
125+
/*
126+
Additional challenge...
127+
*/
128+
129+
fmt.Printf("\nAdditional challenge...\n")
130+
131+
var taskManager TaskManager = TaskManager{shouldPrintLogs: true}
132+
133+
var exit bool = false
134+
var reader *bufio.Reader = bufio.NewReader(os.Stdin)
135+
136+
for !exit {
137+
fmt.Print("\nWrite an operation ('Add task', 'Delete task by title', 'Print tasks', or 'Exit'): ")
138+
operation, readerErr := reader.ReadString('\n')
139+
if readerErr != nil {
140+
continue
141+
}
142+
143+
operation = strings.TrimSpace(operation)
144+
operation = strings.ToUpper(operation)
145+
146+
operationActions:
147+
switch operation {
148+
case "ADD TASK":
149+
fmt.Print("\nTask title: ")
150+
taskTitle, readerErr := reader.ReadString('\n')
151+
if readerErr != nil {
152+
break operationActions
153+
}
154+
155+
fmt.Print("Task description: ")
156+
taskDescription, readerErr := reader.ReadString('\n')
157+
if readerErr != nil {
158+
break operationActions
159+
}
160+
161+
taskManager.addTask(Task{
162+
description: strings.TrimSpace(taskDescription),
163+
title: strings.TrimSpace(taskTitle),
164+
})
165+
166+
case "DELETE TASK BY TITLE":
167+
fmt.Print("\nTask title: ")
168+
taskTitle, readerErr := reader.ReadString('\n')
169+
if readerErr != nil {
170+
break operationActions
171+
}
172+
173+
taskManager.deleteTaskByTitle(taskTitle)
174+
175+
case "PRINT TASKS":
176+
fmt.Println()
177+
taskManager.printTasks()
178+
179+
case "EXIT":
180+
exit = true
181+
fmt.Print("\nApplication closed!")
182+
183+
default:
184+
fmt.Print("\nInvalid operation! Try again...\n")
185+
}
186+
}
187+
}

0 commit comments

Comments
 (0)