← Về danh sách bài học Bài 2/20

👋 Bài 2: Chương Trình Hello World Đầu Tiên

⏱️ Thời gian đọc: 20 phút | 📚 Độ khó: Dễ

🎯 Sau bài học này, bạn sẽ:

1. Tạo Project Đầu Tiên

Hãy bắt đầu bằng việc tạo thư mục cho dự án và khởi tạo Go module:

Terminal
# Tạo thư mục cho project
mkdir hello-go
cd hello-go

# Khởi tạo Go module (quan trọng!)
go mod init hello-go

# Tạo file main.go
touch main.go   # Linux/Mac
# hoặc: type nul > main.go   # Windows
📌 Go Module là gì?
Go Module là hệ thống quản lý dependencies (thư viện) của Go từ version 1.11. Lệnh go mod init tạo file go.mod để quản lý project.

2. Viết Chương Trình Hello World

Mở file main.go và viết code sau:

main.go
package main

import "fmt"

func main() {
    fmt.Println("Xin chào, Gopher! 🐹")
    fmt.Println("Chào mừng bạn đến với Go!")
}

Chạy chương trình

Terminal
go run main.go

Kết quả:

Xin chào, Gopher! 🐹
Chào mừng bạn đến với Go!
🎉 Chúc mừng! Bạn vừa viết và chạy thành công chương trình Go đầu tiên!

3. Giải Thích Chi Tiết Từng Dòng

Hãy phân tích kỹ từng phần của chương trình:

package main Khai báo package. main là package đặc biệt cho chương trình chạy được.
import "fmt" Import package fmt (format) để in ra màn hình.
func main() { } Hàm main - điểm bắt đầu của chương trình.
fmt.Println(...) Gọi hàm Println từ package fmt để in text ra màn hình.

📦 Package là gì?

Package là cách Go tổ chức code. Mọi file Go đều phải thuộc về một package.

📥 Import là gì?

import dùng để "nhập" các package khác vào chương trình. Ở đây ta import fmt (format) - package chuẩn của Go để xử lý input/output.

Cách import nhiều packages
// Cách 1: Import từng dòng
import "fmt"
import "math"

// Cách 2: Import gom nhóm (khuyên dùng)
import (
    "fmt"
    "math"
)

🏁 Hàm main() là gì?

func main() là hàm điểm vào (entry point) của chương trình. Khi bạn chạy chương trình, Go sẽ tìm và thực thi hàm main() đầu tiên.

⚠️ Quy tắc bắt buộc:
• File chứa hàm main() phải có package main
• Mỗi chương trình chỉ có một hàm main()
• Không có hàm main = không chạy được (là library/package)

4. go run vs go build

go run - Chạy nhanh

go run biên dịch và chạy chương trình trong một bước. File thực thi được tạo tạm thời và xóa sau khi chạy xong.

# Chạy một file
go run main.go

# Chạy nhiều files
go run main.go helper.go

# Chạy tất cả files trong thư mục
go run .

go build - Biên dịch ra file thực thi

go build tạo file thực thi (.exe trên Windows) mà bạn có thể chạy trực tiếp mà không cần Go đã cài đặt.

# Build - tạo file thực thi
go build -o myapp main.go

# Chạy file vừa build
./myapp          # Linux/Mac
myapp.exe        # Windows
Lệnh Khi nào dùng
go run Lúc đang phát triển, test nhanh
go build Khi cần file để deploy/chia sẻ

5. Bình Luận (Comments) Trong Code

Comments là phần text mà Go sẽ bỏ qua khi chạy. Dùng để giải thích code cho người đọc (và cho chính bạn trong tương lai!).

main.go
package main

import "fmt"

// Đây là comment 1 dòng

/*
   Đây là comment
   nhiều dòng
*/

func main() {
    // In ra lời chào
    fmt.Println("Hello, World!") // Comment cuối dòng
}
💡 Mẹo viết comment tốt:
• Giải thích TẠI SAO làm việc đó, không chỉ việc gì đang làm
• Viết comment bằng tiếng Việt cũng được!
• Code tốt thường không cần quá nhiều comment

6. Các Hàm fmt Thường Dùng

main.go
package main

import "fmt"

func main() {
    name := "Gopher"
    age := 10
    
    // Println - in và xuống dòng
    fmt.Println("Hello, World!")
    
    // Print - in nhưng không xuống dòng
    fmt.Print("Hello ")
    fmt.Print("World!\n") // \n để xuống dòng thủ công
    
    // Printf - in có format (quan trọng!)
    fmt.Printf("Tên: %s, Tuổi: %d\n", name, age)
    
    // Sprintf - trả về string (không in ra)
    message := fmt.Sprintf("Xin chào %s!", name)
    fmt.Println(message)
}
📌 Format specifiers phổ biến:
%s - string (chuỗi)
%d - integer (số nguyên)
%f - float (số thực)
%v - value (tự đoán kiểu)
%T - type (in ra kiểu dữ liệu)
\n - xuống dòng

📝 Bài Tập Thực Hành

Hãy tự viết chương trình:

  1. Tạo project mới tên my-info
  2. In ra tên của bạn
  3. In ra tuổi của bạn
  4. Dùng Printf để in câu: "Tôi là [tên], [tuổi] tuổi"
👀 Xem đáp án
package main

import "fmt"

func main() {
    name := "Minh"
    age := 25
    
    fmt.Println("Tên:", name)
    fmt.Println("Tuổi:", age)
    fmt.Printf("Tôi là %s, %d tuổi\n", name, age)
}

📝 Tóm Tắt Bài Học