L30 — Generics: type parameters, constraints, performance
Ba module tương tác để "chạm" vào generics Go: (1) xem cách compiler suy ra
T từ đối số, (2) test xem type nào thoả constraint nào, và
(3) so sánh performance Sum 1M phần tử giữa raw,
generic, và interface{}. Tất cả standalone,
mở file:// là chạy.
1. Type parameter inference — Go suy ra T từ đối số
Cho function signature func Min[T Ordered](a, b T) T. Khi
bạn gọi Min(3, 5), compiler không cần bạn ghi
Min[int](3, 5) — nó suy ra T = int từ kiểu của
3 và 5. Nhập 2 giá trị bên dưới, bấm
Instantiate để xem T được resolve.
Generic signature
Instantiated function
Inference trace
2. Constraint satisfaction — type nào thoả constraint nào?
Chọn 1 constraint bên trái. Các type bên phải sẽ highlight: xanh ✓ = thoả, mờ ✗ = không thoả. Đây là cách trực quan nhất để nhớ "constraint nào cho phép type nào".
3. Performance — Generic vs interface{} vs raw int
Chạy benchmark thực tế trong trình duyệt: tính Sum trên
1,000,000 phần tử với 3 cách. Generic gần
như miễn phí so với raw; interface{} chậm hơn nhiều do
boxing + type assertion.
interface{} thường chậm 5-15× so với raw vì mỗi
int được box lên heap.