Nâng cao ẩn — dùng khi cần
3 mục này 99% người dùng Go không cần trong công việc hàng ngày — biết để nhận ra khi gặp trong code người khác, không phải để dùng thường xuyên.
G1. Reflection (reflect)
Cho phép kiểm tra kiểu tại runtime. Được các thư viện JSON, ORM dùng.
v := reflect.ValueOf(42)
fmt.Println(v.Kind()) // int
fmt.Println(v.Int()) // 42
// Duyệt field struct
u := User{Name: "Alice"}
t := reflect.TypeOf(u)
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
fmt.Println(field.Name, field.Tag.Get("json"))
}
⚠️ Cảnh báo: chậm, mất kiểm tra kiểu compile-time, code khó đọc. Chỉ dùng khi thực sự cần (viết framework).
G2. unsafe — Con dao 2 lưỡi
Cho phép ép kiểu bỏ qua kiểm tra (như C).
import "unsafe"
var x int64 = 42
p := unsafe.Pointer(&x)
y := (*float64)(p) // Ép sang float64 — nguy hiểm!
👉 99% người dùng Go không bao giờ cần dùng. Chỉ trong: thư viện hiệu năng cao, C interop.
G3. Build tags & Cross-compile
Build tag — chọn file theo môi trường
//go:build linux
// +build linux
package foo
Cross-compile — biên dịch cho HĐH khác
GOOS=linux GOARCH=amd64 go build -o app-linux
GOOS=windows GOARCH=amd64 go build -o app.exe
GOOS=darwin GOARCH=arm64 go build -o app-mac
👉 Đây là superpower của Go — 1 lệnh, build cho mọi HĐH, không cần Docker/VM.