添加任务
本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 21 课,共 68 课。
挑战
简单在任务管理的基础上,你现在将实现向系统添加新任务的核心功能。这个挑战要求你创建一个函数,将新任务追加到现有切片中,从而扩展任务列表。
重要提示:由于任务名称可能包含空格(例如 "Buy groceries"),你需要使用 bufio.Scanner 读取完整的输入行。fmt.Scanln 函数会在遇到第一个空格时停止读取,这会导致包含空格的任务名称无法正确读取。请使用 bufio.NewScanner(os.Stdin),并依次调用 scanner.Scan() 和 scanner.Text() 来读取完整的行。
你将收到两项输入:
- 一个表示现有任务数量的字符串(例如
"2") - 一个包含任务名称的字符串,名称之间用逗号分隔(例如
"Buy groceries,Call dentist,Finish project")
你的任务是:
- 定义与上一个挑战相同的
Task结构体,其中包含Name(string)和Completed(bool)字段 - 创建一个名为
addTask的函数,该函数接收一个由Task结构体组成的切片和一个任务名称(string)作为参数 addTask函数应返回一个添加了新任务的切片(新任务的Completed应设为false)- 使用
bufio.Scanner正确读取输入行,以处理包含空格的任务名称 - 根据第一项输入中指定的现有任务数量,创建初始任务切片:
- 如果数量是
"0",则从空切片开始 - 如果数量大于
"0",则创建相应数量的占位任务,名称类似"Existing Task 1"、"Existing Task 2"等,并将它们全部标记为未完成
- 如果数量是
- 解析第二项输入中以逗号分隔的任务名称
- 使用你的
addTask函数将每个新任务添加到切片中 - 按照以下格式打印最终切片中的每个任务:
"Task: [name], Completed: [true/false]" - 按照以下格式打印任务总数:
"Total tasks: [count]"
例如,如果你有 1 个现有任务,并想添加 "Buy groceries,Call dentist",输出应先显示现有任务,再显示两个新任务,最后显示任务总数。这个挑战将练习使用 append 函数操作切片,并演示如何构建扩展数据结构的功能。
亲手试试
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: 在这里创建 addTask 函数
func main() {
// 创建 scanner,用于读取每行输入
scanner := bufio.NewScanner(os.Stdin)
// 读取现有任务的数量
scanner.Scan()
existingTasksStr := scanner.Text()
// 读取任务名称
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: 完成实现
// 1. 将 existingTasksStr 转换为整数
// 2. 创建包含现有任务的初始切片
// 3. 解析 taskNamesStr 并添加新任务
// 4. 输出所有任务和任务总数
}逻辑与流程中的所有课
自己练习: Go 在线编译器