Просмотр всех задач
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 22 из 68.
Задание
ЛегкоПродолжая работу над вашей системой управления задачами, теперь вы реализуете функциональность для отображения всех задач в удобном для пользователя формате. Эта задача сосредоточена на итерации по вашей коллекции задач и представлении каждой задачи с ее статусом завершения с использованием четких визуальных индикаторов.
Вы получите два входных значения:
- Строка, представляющая количество задач (например,
"4") - Строка, содержащая данные о задачах в формате:
"name1:status1,name2:status2,name3:status3", где статус — это либо"true", либо"false"(например,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
Ваша задача:
- Определить ту же структуру
Taskиз предыдущих задач с полямиName(string) иCompleted(bool) - Создать функцию с именем
viewAllTasks, которая принимает слайс структурTaskв качестве параметра - Внутри функции
viewAllTasksвыполнить итерацию по слайсу и вывести каждую задачу в следующем формате:- Для завершенных задач:
"[x] [task_name]" - Для незавершенных задач:
"[ ] [task_name]"
- Для завершенных задач:
- Разобрать данные о задачах из второго входного значения для создания слайса задач:
- Разделить входную строку по запятым, чтобы получить отдельные записи задач
- Для каждой записи разделить по двоеточию, чтобы отделить имя и статус
- Преобразовать строку статуса в логическое значение (
"true"становитсяtrue,"false"становитсяfalse)
- Вызвать функцию
viewAllTasksс созданным слайсом - После отображения всех задач вывести сводку в формате:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Например, если у вас есть задачи "Buy groceries:false,Call dentist:true,Finish project:false", ваш вывод должен показывать каждую задачу с соответствующими флажками, а затем отображать сводку с общим количеством и статистикой завершения. Эта задача тренирует итерацию по слайсам, условное форматирование с помощью операторов if и предоставляет пользователям четкое представление о прогрессе их задач.
Попробуйте сами
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func viewAllTasks(tasks []Task) {
// TODO: Реализовать функцию для отображения всех задач
// Для выполненных задач: "[x] [task_name]"
// Для невыполненных задач: "[ ] [task_name]"
}
func main() {
var numTasksStr string
fmt.Scanln(&numTasksStr)
numTasks, _ := strconv.Atoi(numTasksStr)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
taskData := scanner.Text()
var tasks []Task
// TODO: Разобрать данные о задачах из строки taskData
// Разделить по запятым, чтобы получить отдельные записи о задачах
taskEntries := strings.Split(taskData, ",")
_ = taskEntries
// Для каждой записи разделить по двоеточию, чтобы отделить имя и статус
// Преобразовать строку статуса в логическое значение и создать структуры Task
// TODO: Вызвать функцию viewAllTasks с созданным срезом
// TODO: Рассчитать и вывести сводку
// Формат: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
_ = tasks
_ = numTasks
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение