L31 — reflect: runtime introspection
Reflect cho phép chương trình tự nhìn vào chính nó tại runtime: đọc type, đọc field,
đổi giá trị, gọi hàm theo tên. Bài này có 3 module: (1) inspect struct và tag,
(2) trắc nghiệm khi nào value CanSet(), (3) so sánh chi phí direct vs reflect.
1. Struct Inspector — walk fields + tag
Dán định nghĩa struct vào ô bên dưới (syntax Go). Inspector sẽ parse rồi hiển thị
bảng Name / Type / Kind / Tag, mô phỏng đúng những gì
reflect.TypeOf(x).Field(i) trả về.
2. Settable check — khi nào CanSet() == true?
Một reflect.Value có settable hay không quyết định việc bạn có gọi
SetX được mà không panic. Click Check ở từng case để xem kết quả + lý do.
3. Performance — direct call vs reflect call (1M ops)
Bar chart dưới đây mô phỏng thời gian thực thi 1 triệu thao tác, dựa trên benchmark thực của Go 1.22 trên máy modern (Apple M1). Reflect chậm hơn direct 10-100× tuỳ thao tác.
reflect.Type info ngoài vòng lặp, hoặc dùng code generation
(như easyjson, protobuf) thay vì reflect runtime.