Thêm một việc cần làm
Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 21 trên 68.
Thử thách
DễDựa trên nền tảng quản lý tác vụ bạn đã xây dựng, giờ bạn sẽ triển khai chức năng cốt lõi để thêm tác vụ mới vào hệ thống. Thử thách này tập trung vào việc tạo một hàm giúp mở rộng danh sách tác vụ bằng cách thêm tác vụ mới vào slice hiện có.
Lưu ý quan trọng: Vì tên tác vụ có thể chứa dấu cách (như "Buy groceries"), bạn cần dùng bufio.Scanner để đọc toàn bộ dòng đầu vào. Hàm fmt.Scanln dừng đọc ở dấu cách đầu tiên, khiến tên tác vụ có dấu cách bị lỗi. Hãy dùng bufio.NewScanner(os.Stdin) rồi gọi scanner.Scan() và tiếp theo là scanner.Text() để đọc đầy đủ từng dòng.
Bạn sẽ nhận được hai đầu vào:
- Một chuỗi biểu thị số lượng tác vụ hiện có (ví dụ:
"2") - Một chuỗi chứa tên các tác vụ, được phân tách bằng dấu phẩy (ví dụ:
"Buy groceries,Call dentist,Finish project")
Nhiệm vụ của bạn là:
- Định nghĩa struct
Taskgiống như trong thử thách trước, với các trườngName(string) vàCompleted(bool) - Tạo hàm có tên
addTask, nhận một slice các structTaskvà tên tác vụ (string) làm tham số - Hàm
addTaskcần trả về một slice mới có thêm tác vụ (tác vụ mới cần cóCompletedđược đặt thànhfalse) - Dùng
bufio.Scannerđể đọc đúng các dòng đầu vào, nhằm xử lý tên tác vụ có dấu cách - Tạo một slice tác vụ ban đầu dựa trên số lượng tác vụ hiện có được chỉ định trong đầu vào thứ nhất:
- Nếu số lượng là
"0", hãy bắt đầu bằng một slice rỗng - Nếu số lượng lớn hơn
"0", hãy tạo số tác vụ giữ chỗ tương ứng, với các tên như"Existing Task 1","Existing Task 2", v.v., tất cả đều được đánh dấu là chưa hoàn thành
- Nếu số lượng là
- Phân tích tên các tác vụ được phân tách bằng dấu phẩy từ đầu vào thứ hai
- Dùng hàm
addTaskđể thêm từng tác vụ mới vào slice - In từng tác vụ trong slice cuối cùng theo định dạng:
"Task: [name], Completed: [true/false]" - In tổng số tác vụ theo định dạng:
"Total tasks: [count]"
Ví dụ, nếu bạn có 1 tác vụ hiện có và muốn thêm "Buy groceries,Call dentist", kết quả cần hiển thị tác vụ hiện có trước, tiếp theo là hai tác vụ mới, rồi đến tổng số lượng. Thử thách này giúp bạn luyện tập thao tác với slice bằng hàm append và cho thấy cách xây dựng chức năng mở rộng cấu trúc dữ liệu.
Tự làm thử
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Tạo hàm addTask tại đây
func main() {
// Tạo scanner để đọc các dòng đầu vào
scanner := bufio.NewScanner(os.Stdin)
// Đọc số lượng tác vụ hiện có
scanner.Scan()
existingTasksStr := scanner.Text()
// Đọc tên các tác vụ
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: Hoàn thiện phần triển khai
// 1. Chuyển existingTasksStr thành số nguyên
// 2. Tạo slice ban đầu chứa các tác vụ hiện có
// 3. Phân tích taskNamesStr và thêm các tác vụ mới
// 4. In ra tất cả tác vụ và tổng số tác vụ
}Tất cả bài học trong Logic và luồng điều khiển
1Luồng điều khiển nâng cao
Switch với `fallthrough`Thoát khỏi vòng lặp lồng nhauTiếp tục một vòng lặp cụ thểCâu lệnh `goto`Ôn tập: điều khiển vòng lặp nâng cao4Dự án: Danh sách việc cần làm đơn giản
Thiết lập dự ánThêm một việc cần làm2Struct và phương thức
Định nghĩa phương thức cho structReceiver giá trịReceiver con trỏChọn receiverPhương thức và hàmÔn tập: hành vi của struct5Tìm hiểu chuyên sâu về map
Map chứa structCon trỏ làm giá trị của mapKiểm tra map nilSo sánh các mapÔn tập: bộ đếm tần suất từ8Dự án: Quản lý hàng tồn kho đơn giản
Tổng quan dự ánKiểm tra hàng tồn kho3Interface (cơ bản)
Interface là gì?Định nghĩa interfaceTriển khai interfaceDùng kiểu interfaceInterface rỗngKhẳng định kiểuType switchÔn tập: hình dạng và hành viTự luyện tập: Trình biên dịch Go online