🧂 Nguyên Liệu Cơ Bản - Variables & Data Types
Mọi món ăn ngon đều bắt đầu từ việc chuẩn bị nguyên liệu. Trong Bếp Á Golang, trước khi "nấu" bất kỳ chương trình nào, chúng ta cần chuẩn bị sẵn sàng các "nguyên liệu" - đó chính là các biến và kiểu dữ liệu.
🎯 Món Ăn Hôm Nay
Hôm nay, chúng ta sẽ học cách chuẩn bị và phân loại nguyên liệu trong bếp Go. Tưởng tượng bạn là một đầu bếp chuẩn bị nấu món Phở. Bạn cần:
- Nguyên liệu (Variable): Những thứ bạn sẽ dùng để nấu, như thịt bò, nước dùng, bánh phở...
- Loại nguyên liệu (Data Type): Phân loại chúng ra, ví dụ: thịt bò là string(chữ), lượng nước dùng làint(số), nước dùng đã sẵn sàng chưa làbool(đúng/sai).
🥘 Nguyên Liệu (Variable) Là Gì?
Variable (Biến) = Hộp đựng nguyên liệu.
Mỗi hộp có một cái nhãn (tên biến) và chứa một loại nguyên liệu nhất định (kiểu dữ liệu). Trong Go, có hai cách chính để "lấy hộp đựng" và "bỏ nguyên liệu vào".
- Cách trang trọng (var):var tenNguyenLieu kieuNguyenLieu = giaTri
- Cách nhanh gọn (:=):tenNguyenLieu := giaTri(Go sẽ tự suy ra kiểu nguyên liệu)
👨🍳 Câu Chuyện Trong Bếp
Đầu bếp trưởng chuẩn bị cho ca làm việc. Ông lấy ra các hộp đựng và dán nhãn cho chúng:
- Một hộp dán nhãn tenMonAn, bên trong chứa tờ giấy ghi "Phở Bò".
- Một hộp dán nhãn soLuongThit, bên trong chứa 500 (gram).
- Một hộp dán nhãn nuocDungDaSoi, bên trong là một công tắc bật/tắt (bật làtrue, tắt làfalse).
Việc chuẩn bị sẵn các "hộp đựng" này giúp quá trình nấu nướng (chạy chương trình) diễn ra trơn tru, mọi thứ đều ở đúng vị trí của nó.
📝 Công Thức "Chuẩn Bị" (Code)
Ví Dụ 1: Cách Trang Trọng (var)
Đây là cách khai báo đầy đủ, rõ ràng. Thường được dùng khi bạn muốn khai báo biến ở ngoài các "công thức" (hàm).
package main
import "fmt"
// Khai báo nguyên liệu chính cho cả nhà hàng
var tenNhaHang string = "Bếp Á Go"
func main() {
    // Khai báo nguyên liệu cho một món ăn cụ thể
    var tenMonAn string = "Phở Bò"
    var soLuongTo int = 100
    var sanSangPhucVu bool = true
    fmt.Println("Chào mừng đến với", tenNhaHang)
    fmt.Println("Món ăn:", tenMonAn)
    fmt.Println("Số lượng có thể phục vụ:", soLuongTo)
    fmt.Println("Sẵn sàng phục vụ:", sanSangPhucVu)
}
Ví Dụ 2: Cách Nhanh Gọn (:=)
Đây là cách phổ biến nhất bên trong các "công thức" (hàm) vì sự ngắn gọn của nó. Go sẽ tự động nhận diện kiểu dữ liệu.
package main
import "fmt"
func main() {
    // Go tự hiểu "Bún Chả" là string, 50 là int
    tenMonAn := "Bún Chả"
    giaTien := 50000
    // Bạn không thể dùng := ở ngoài hàm
    fmt.Println("Hôm nay có món:", tenMonAn)
    fmt.Println("Giá:", giaTien, "VND")
}
🔥 Thực Hành Trong Bếp
Bài Tập 1: Chuẩn Bị Món Nem Rán
Sử dụng toán tử := để khai báo các biến sau cho món "Nem Rán":
- tenMon(string)
- soLuongCai(int)
- conHang(bool) Sau đó in các thông tin này ra màn hình.
Bài Tập 2: Khai Báo Hàng Loạt
Sử dụng khối var () để khai báo một lượt các nguyên liệu cần thiết cho việc pha nước mắm.
package main
import "fmt"
func main() {
    var (
        luongDuong int = 2    // thìa
        luongNuocMam int = 3  // thìa
        luongChanh int = 1    // thìa
        coToi bool = true
    )
    fmt.Println("Công thức pha nước mắm:")
    fmt.Println("- Đường:", luongDuong)
    fmt.Println("- Nước mắm:", luongNuocMam)
    fmt.Println("- Chanh:", luongChanh)
    fmt.Println("- Có tỏi không?", coToi)
}
⚠️ Những Lỗi Đầu Bếp Thường Gặp
Lỗi 1: Khai Báo Lại Với :=
Toán tử := chỉ dùng cho lần đầu tiên khai báo. Nếu biến đã tồn tại, bạn phải dùng dấu = để cập nhật giá trị.
// ❌ SAI
tenMon := "Phở Bò"
tenMon := "Phở Gà" // Lỗi: no new variables on left side of :=
// ✅ ĐÚNG
tenMon := "Phở Bò"
tenMon = "Phở Gà" // Cập nhật giá trị
Lỗi 2: Sai Loại Nguyên Liệu (Type Mismatch)
Go là ngôn ngữ "kén chọn". Hộp đựng loại nào thì chỉ chứa được nguyên liệu loại đó.
// ❌ SAI
var soLuong int = 10
soLuong = "mười" // Lỗi: cannot use "mười" (type string) as type int
// ✅ ĐÚNG
var soLuong int = 10
soLuong = 20
💡 Bí Quyết Của Đầu Bếp
- Ưu tiên :=: Bên trong các hàm, hãy luôn ưu tiên dùng:=cho ngắn gọn và dễ đọc.
- Dùng varkhi cần: Sử dụngvarkhi bạn khai báo biến ở cấp độ package (bên ngoài hàm) hoặc khi bạn muốn khai báo một biến mà chưa gán giá trị ngay.
- Tên biến rõ ràng: Đặt tên biến bằng tiếng Việt không dấu, thể hiện rõ mục đích của nguyên liệu, ví dụ: soLuongThitBothay vìsltb.
🎓 Bạn Đã Học Được
- ✅ Biến (Variable) giống như hộp đựng nguyên liệu.
- ✅ Kiểu dữ liệu (Data Type) là loại nguyên liệu bên trong.
- ✅ Hai cách khai báo chính: var(trang trọng) và:=(nhanh gọn).
- ✅ Go yêu cầu sự chính xác về kiểu dữ liệu.
🍜 Món Tiếp Theo
Khi đã có đủ nguyên liệu, người đầu bếp cần các quy trình để chế biến, ví dụ: "nếu thịt đã chín thì vớt ra", "lặp lại việc thái hành cho đến khi hết". Đó chính là các cấu trúc điều khiển.
👉 Kiểm Tra Độ Chín - Cấu Trúc Điều Khiển
💡 Lời Khuyên Cuối: Việc chuẩn bị "nguyên liệu" cẩn thận ngay từ đầu là bí quyết để "nấu" được những chương trình Go ngon và không bị lỗi.