Menu
CoddyTech

Bí danh package

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 54 trên 68.

Đôi khi bạn cần đặt cho một package đã nhập một tên khác trong tệp của mình. Đây gọi là đặt bí danh cho package (package aliasing), và Go giúp bạn thực hiện việc này dễ dàng với cú pháp đơn giản.

Để tạo bí danh, bạn chỉ định tên mới trước đường dẫn package trong câu lệnh import:

import f "fmt"

Giờ đây, thay vì dùng fmt.Println(), bạn có thể dùng f.Println() ngắn gọn hơn. Cách này đặc biệt hữu ích trong hai trường hợp: khi tên package rất dài và bạn muốn rút gọn, hoặc khi cần tránh xung đột tên giữa các package trùng tên.

package main

import f "fmt"

func main() {
    f.Println("Hello with an alias!")
}

Đặt bí danh cho package giúp bạn linh hoạt hơn khi tham chiếu đến các package đã nhập, khiến code dễ đọc hơn và giúp bạn xử lý các trường hợp import phức tạp.

challenge icon

Thử thách

Dễ

Tạo một chương trình minh họa việc đặt bí danh cho package bằng cách import nhiều package với bí danh tùy chỉnh và dùng chúng để thực hiện nhiều thao tác. Thử thách này sẽ kiểm tra khả năng tạo bí danh phù hợp cho các package và sử dụng chúng nhất quán trong toàn bộ chương trình.

Bạn sẽ nhận được hai đầu vào:

  • Một chuỗi chứa các định nghĩa bí danh package theo định dạng "package1:alias1,package2:alias2,package3:alias3" (ví dụ: "fmt:output,strings:text,strconv:convert")
  • Một chuỗi chứa các thao tác cần thực hiện theo định dạng "operation1:data1|operation2:data2|operation3:data3" (ví dụ: "print:Hello World|upper:go programming|parse:42")

Nhiệm vụ của bạn:

  1. 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 định nghĩa bí danh package
  2. Với mỗi định nghĩa bí danh, tách theo dấu hai chấm để lấy tên package gốc và bí danh của nó
  3. Import các package bằng những bí danh đã chỉ định:
    • Import fmt với bí danh được cung cấp
    • Import strings với bí danh được cung cấp
    • Import strconv với bí danh được cung cấp
  4. Hiển thị thông tin thiết lập bí danh:
    • "=== PACKAGE ALIAS DEMONSTRATION ==="
    • "Setting up package aliases:"
    • Với mỗi bí danh: "- [original_package] aliased as '[alias]'"
  5. Phân tích đầu vào thứ hai bằng cách tách theo dấu gạch đứng để lấy từng thao tác
  6. Với mỗi thao tác, tách theo dấu hai chấm để lấy loại thao tác và dữ liệu
  7. Hiển thị tiêu đề các thao tác: "Performing operations using aliases:"
  8. Với mỗi thao tác, thực hiện hành động tương ứng bằng các package có bí danh:
    • Với thao tác "print": Dùng bí danh fmt để in ra "[fmt_alias].Println: [data]"
    • Với thao tác "upper": Dùng bí danh strings để chuyển dữ liệu thành chữ hoa và in ra "[strings_alias].ToUpper: [uppercase_data]"
    • Với thao tác "lower": Dùng bí danh strings để chuyển dữ liệu thành chữ thường và in ra "[strings_alias].ToLower: [lowercase_data]"
    • Với thao tác "parse": Dùng bí danh strconv để phân tích dữ liệu thành số nguyên và in ra "[strconv_alias].Atoi: [parsed_number]"
    • Với thao tác "format": Dùng bí danh fmt để định dạng và in ra "[fmt_alias].Sprintf: Formatted -> [data]"
  9. Đếm và hiển thị thống kê thao tác:
    • "Operation Summary:"
    • "Total operations performed: [total_operations]"
    • "Packages used: [comma_separated_list_of_aliases_used]"
  10. Hiển thị lợi ích của việc đặt bí danh:
    • "Benefits demonstrated:"
    • "- Shorter function calls using aliases"
    • "- Improved code readability"
    • "- Avoided potential naming conflicts"
  11. Hiển thị thông báo hoàn tất: "Package aliasing demonstration completed successfully"

Dùng package strings để tách chuỗi đầu vào và thao tác với văn bản, package strconv để chuyển chuỗi thành số nguyên, và package fmt để tạo đầu ra có định dạng. Nhớ sử dụng các bí danh nhất quán trong toàn bộ chương trình thay vì tên package gốc. Thử thách này minh họa cách việc đặt bí danh package có thể giúp code ngắn gọn, dễ đọc hơn và tránh xung đột tên.

Tự làm thử

package main

import (
	"bufio"
	f "fmt"
	"os"
	"sort"
	c "strconv"
	s "strings"
)

func main() {
	// Đọc đầu vào bằng bufio.Scanner để xử lý khoảng trắng chính xác
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	aliasInput := scanner.Text()
	
	scanner.Scan()
	operationsInput := scanner.Text()
	
	// Phân tích các định nghĩa bí danh
	aliasDefinitions := s.Split(aliasInput, ",")
	
	// Phân tích các thao tác
	operations := s.Split(operationsInput, "|")
	
	// TODO: Viết code bên dưới
	// 1. Phân tích từng định nghĩa bí danh để lấy tên package và bí danh (kiểm tra độ dài)
	// 2. Hiển thị tiêu đề minh họa bí danh package và thông tin thiết lập
	// 3. Xử lý từng thao tác bằng package có bí danh phù hợp
	// 4. Đếm các thao tác và theo dõi những bí danh đã dùng (giữ nguyên thứ tự hoặc sắp xếp)
	// 5. Hiển thị phần tóm tắt thao tác và lợi ích
	
	// Nhớ dùng bí danh nhất quán trong toàn bộ chương trình
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Go online