Flow Golang Compile
⚙️ 1. Quá trình Biên dịch (Build Process)
🔹 Từ Source code → Binary
Go là ngôn ngữ biên dịch tĩnh (statically compiled language):
go build main.go
Quá trình này:
Phân tích cú pháp (Lexing & Parsing)
Chuyển source
.go
thành cây cú pháp (AST - Abstract Syntax Tree).
Kiểm tra kiểu (Type Checking)
Phát hiện lỗi kiểu, không đúng contract interface, v.v...
Biên dịch (Compilation)
Chuyển AST thành mã máy (machine code).
Liên kết (Linking)
Gộp các package thành một binary duy nhất.
Tự động liên kết runtime, syscall, garbage collector, net/http, v.v...
🔥 Kết quả: Go tạo ra một self-contained executable binary (không phụ thuộc runtime ngoài như JVM, .NET, hay thư viện hệ điều hành).
⚡ 2. Thực thi (Execution)
🧵 Go Runtime
Go đi kèm với một runtime nhẹ (~2–3MB), bao gồm:
Goroutine scheduler (G-P-M model)
Garbage Collector
Network poller (epoll/kqueue)
Timers
🔸 Mô hình G-P-M:
G: Goroutine
Task nhỏ cần chạy
P: Processor
Quản lý goroutines, điều phối
M: OS Thread
Giao tiếp trực tiếp với CPU
👉 Go runtime quản lý M:N scheduling, cho phép hàng triệu goroutine chạy hiệu quả chỉ với vài thread thực.
🧱 3. Binary là gì?
Go build ra một native binary:
Tùy theo OS:
.exe
(Windows), file không đuôi (Linux/macOS)Có thể chạy trực tiếp, deploy không cần runtime đi kèm
Hỗ trợ cross-compilation:
GOOS=linux GOARCH=amd64 go build -o app-linux
🧪 4. Ưu điểm của quá trình biên dịch Go
🔒 Type-safe
Phát hiện lỗi sớm từ lúc build
⚡ Nhanh
Build cực nhanh (Go build time < Rust < C++ < Java)
🚀 Deploy dễ
Chỉ cần copy binary, không cần VM
🐳 Phù hợp container
Binary nhẹ, đơn giản, rất thích hợp cho Docker/K8s
🔍 5. Một ví dụ cụ thể
File: main.go
main.go
package main
import "fmt"
func main() {
fmt.Println("Xin chào Tài Titans!")
}
Biên dịch:
go build -o hello main.go
Thực thi:
./hello
# => Xin chào Tài Titans!
🧩 6. Điều gì xảy ra bên trong?
Khi bạn chạy ./hello
:
OS nạp binary vào bộ nhớ.
Khởi động Go runtime (GC, scheduler).
Thực thi hàm
main.main()
.Khi xong, Go runtime dọn dẹp và thoát.
✅ Tổng kết
go build
Biên dịch source thành binary
Binary
Self-contained, chạy độc lập
Runtime
Nhẹ, hỗ trợ GC và scheduler
Ưu điểm
Nhanh, dễ deploy, không cần runtime ngoài
Last updated