Go là gì?
Go (Golang) là ngôn ngữ do Google tạo ra, compile thẳng thành 1 binary gọn, không cần runtime hay VM cài sẵn trên máy chạy (khác Java/Node cần JVM/Node runtime). Được thiết kế để build cực nhanh và code dễ đọc, dễ bảo trì ở quy mô lớn.
Triết lý: đơn giản hơn là nhiều tính năng
Go cố tình ít tính năng ngôn ngữ so với TypeScript/Java/Rust — không có generic phức tạp (dù đã có generic cơ bản từ Go 1.18), không có exception try/catch (dùng giá trị lỗi trả về thay vì throw), không có class/kế thừa (dùng struct + interface). Mục tiêu: code dễ đọc, dễ dự đoán hành vi, một dev mới join team đọc hiểu ngay không cần biết “convention ngầm” nào.
Cú pháp cơ bản
package main
import "fmt"
// Hàm trả về nhiều giá trị — phổ biến ở Go, dùng để trả (kết quả, lỗi)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("chia cho 0")
}
return a / b, nil
}
func main() {
result, err := divide(10, 2)
if err != nil {
fmt.Println("Lỗi:", err)
return
}
fmt.Println("Kết quả:", result)
}
Không có exception — lỗi là giá trị trả về bình thường, buộc người
gọi phải xử lý tường minh (if err != nil) thay vì im lặng bỏ qua như
JS try/catch đôi khi bị quên.
Goroutines — concurrency nhẹ
Go có goroutine: một luồng xử lý cực nhẹ, tạo bằng từ khoá go đứng
trước lời gọi hàm:
go doSomething() // chạy song song, không block
Nhẹ hơn thread hệ điều hành rất nhiều (có thể chạy hàng chục nghìn goroutine cùng lúc), là lý do các công cụ hạ tầng (Docker, Kubernetes…) hay được viết bằng Go — xử lý song song nhiều việc (nhiều request, nhiều tác vụ nền) mà không tốn tài nguyên.
Compile ra 1 binary — vì sao quan trọng
go build cho ra đúng 1 file thực thi, không phụ thuộc thư viện ngoài lúc
chạy. Đây là khác biệt lớn nhất so với TypeScript (vẫn cần Node.js runtime
node_modulesđể chạy): deploy Go chỉ cần copy 1 file, không lo version Node, không lonpm installlại trên máy khác.
Khi nào Go đáng cân nhắc
- Viết CLI tool / công cụ hạ tầng cần deploy dễ dàng (copy 1 binary, không cần cài runtime)
- Cần xử lý song song nhiều tác vụ nhẹ (network server, worker xử lý hàng loạt)
- Ưu tiên hiệu năng gần với ngôn ngữ compiled, nhưng vẫn muốn cú pháp đơn giản hơn C/C++/Rust
Không hợp nếu bạn đang làm frontend (không có DOM/browser API), hoặc cần hệ sinh thái UI phong phú như React — lúc đó TypeScript vẫn là lựa chọn tự nhiên hơn.
Tài liệu tham khảo
Tài liệu chính thức: go.dev/doc