Danh sách liên hệ cơ bản
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 66 trên 68.
Thử thách
DễTạo một hệ thống quản lý danh bạ để minh họa cách các struct, slice và hàm phối hợp với nhau nhằm sắp xếp và hiển thị thông tin liên hệ. Thử thách này sẽ kiểm tra khả năng định nghĩa cấu trúc dữ liệu tùy chỉnh, quản lý tập hợp dữ liệu và triển khai các hàm để thao tác với dữ liệu đó.
Bạn sẽ nhận được hai đầu vào:
- Một chuỗi chứa thông tin liên hệ theo định dạng
"name1:phone1:email1,name2:phone2:email2,name3:phone3:email3"(ví dụ:"Alice Johnson:555-0123:alice@email.com,Bob Smith:555-0456:bob@email.com,Carol Davis:555-0789:carol@email.com") - Một chuỗi chứa liên hệ mới cần thêm theo định dạng
"name:phone:email"(ví dụ:"David Wilson:555-0321:david@email.com")
Nhiệm vụ của bạn:
- Định nghĩa một struct
Contactvới ba trường kiểu chuỗi:Name,PhonevàEmail - Tạo một hàm có tên
addContactnhận một slice gồm các structContactvà mộtContactmới, sau đó trả về một slice mới có thêm liên hệ đó - Tạo một hàm có tên
displayContactsnhận một slice gồm các structContactvà in ra thông tin của từng liên hệ - Phân tích đầu vào thứ nhất bằng cách tách theo dấu phẩy để lấy từng mục liên hệ
- Với mỗi mục liên hệ, tách theo dấu hai chấm để lấy tên, số điện thoại và email
- Tạo các struct
Contacttừ dữ liệu đã phân tích và lưu chúng trong một slice - Phân tích đầu vào thứ hai bằng cách tách theo dấu hai chấm để tạo một liên hệ mới
- Hiển thị tiêu đề ứng dụng:
"=== CONTACT MANAGEMENT SYSTEM ===" - Hiển thị các liên hệ ban đầu bằng hàm
displayContactscủa bạn với tiêu đề:"Initial contact list:" - Hiển thị liên hệ mới đang được thêm:
"Adding new contact: [name] ([phone]) - [email]" - Dùng hàm
addContactcủa bạn để thêm liên hệ mới vào slice - Hiển thị các liên hệ đã cập nhật bằng hàm
displayContactscủa bạn với tiêu đề:"Updated contact list:" - Hiển thị thống kê liên hệ:
"=== CONTACT STATISTICS ===""Total contacts: [number_of_contacts]""Contacts added this session: 1"
- Hiển thị thông báo hoàn tất:
"Contact management operations completed successfully"
Hàm displayContacts cần in ra từng liên hệ theo định dạng: "[index]. [name] - Phone: [phone], Email: [email]", trong đó chỉ số bắt đầu từ 1.
Dùng package strings để tách các chuỗi đầu vào và package fmt để định dạng đầu ra. Thử thách này minh họa cách kết hợp struct để tổ chức dữ liệu, slice để lưu tập hợp và hàm để tổ chức code. Đây là những mẫu cơ bản được dùng xuyên suốt trong lập trình Go.
Tự làm thử
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: Định nghĩa struct Contact tại đây
// TODO: Triển khai hàm (function) addContact tại đây
// TODO: Triển khai hàm displayContacts tại đây
func main() {
// Đọc đầu vào bằng bufio.Scanner để xử lý đúng dấu cách trong tên
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
contactsInput := scanner.Text()
scanner.Scan()
newContactInput := scanner.Text()
// TODO: Viết code bên dưới
// Phân tích đầu vào danh bạ và tạo các struct Contact
// Nhớ kiểm tra slice parts có đủ phần tử trước khi truy cập
// Phân tích đầu vào của liên hệ mới
// Hiển thị tiêu đề ứng dụng
// Hiển thị danh bạ ban đầu
// Thêm liên hệ mới
// Hiển thị danh bạ sau khi cập nhật
// Hiển thị số liệu thống kê
// Hiển thị thông báo hoàn tất
}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