ตรวจสอบฟิลด์และแท็กของสตรักต์
วนดูฟิลด์และอ่านแท็กของสตรักต์
ตรวจสอบฟิลด์และแท็กของสตรักต์ เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
ชนิด StructField
reflect.StructField อธิบายฟิลด์หนึ่งรายการของโครงสร้าง ได้แก่ Name, Type, Tag, Index, Offset, Anonymous และ IsExported
การวนซ้ำฟิลด์
วนซ้ำฟิลด์ทั้งหมดของชนิดโครงสร้าง:
t := reflect.TypeOf(struct{ ID int; Name string }{})
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Println(f.Name, f.Type, f.IsExported())
}การอ่านแท็กของโครงสร้าง
เข้าถึงแท็กผ่าน StructField.Tag.Get("key"):
type User struct {
ID int `json:"id" db:"user_id"`
Name string `json:"name,omitempty"`
}
f, _ := reflect.TypeOf(User{}).FieldByName("Name")
fmt.Println(f.Tag.Get("json")) // "name,omitempty"การแยกวิเคราะห์ตัวเลือกแท็ก
แท็กอาจมีตัวเลือกหลายรายการคั่นด้วยจุลภาค ให้แยกวิเคราะห์ด้วย strings.Split:
tag := f.Tag.Get("json") // "name,omitempty"
parts := strings.Split(tag, ",")
name := parts[0] // "name"
omitempty := len(parts) > 1 && parts[1] == "omitempty"FieldByName และ FieldByIndex
ค้นหาฟิลด์ตามชื่อหรือตามดัชนี FieldByName จะค้นหาฟิลด์ที่ส่งออกในโครงสร้างและโครงสร้างฝังตัว:
f, ok := reflect.TypeOf(User{}).FieldByName("Name")
if ok { fmt.Println(f.Tag.Get("json")) }ฟิลด์ของโครงสร้างฝังตัว
สำหรับโครงสร้างฝังตัว ค่า Anonymous จะเป็น true ให้ใช้ Type.FieldByIndex([]int{0,1}) เพื่อเข้าถึงฟิลด์ที่ซ้อนกัน:
ฟิลด์ที่ไม่ได้ส่งออก
ฟิลด์ที่ไม่ได้ส่งออก ซึ่งเป็นฟิลด์ตัวพิมพ์เล็ก สามารถตรวจสอบชนิดและแท็กได้ แต่ไม่สามารถอ่านหรือกำหนดค่าผ่านการตรวจสอบแบบสะท้อนได้ เพราะจะเกิดแพนิก
การสร้างแคชฟิลด์
การแยกวิเคราะห์แท็กของโครงสร้างทุกครั้งมีค่าใช้จ่ายสูง ให้แคชผลลัพธ์ไว้ใน sync.Map โดยใช้ reflect.Type เป็นคีย์:
var fieldCache sync.Map
func getFields(t reflect.Type) []fieldInfo {
if v, ok := fieldCache.Load(t); ok { return v.([]fieldInfo) }
fields := parseFields(t)
fieldCache.Store(t, fields)
return fields
}กรณีใช้งาน: ORM แบบง่าย
วนดูฟิลด์ทั้งหมดที่มีแท็ก "db" เพื่อสร้างรายการคอลัมน์ INSERT แบบไดนามิก:
t := reflect.TypeOf(u)
v := reflect.ValueOf(u)
for i := 0; i < t.NumField(); i++ {
col := t.Field(i).Tag.Get("db")
val := v.Field(i).Interface()
// build query...
}กรณีใช้งาน: ตัวโหลดการตั้งค่า
วนดูฟิลด์ของโครงสร้างที่มีแท็ก "env" แล้วเติมค่าจากตัวแปรสภาพแวดล้อม:
if env := f.Tag.Get("env"); env != "" {
if val := os.Getenv(env); val != "" {
v.Field(i).SetString(val)
}
}StructTag.Lookup
Tag.Lookup("key") ส่งคืนค่าแท็กและค่าบูลีนที่ระบุว่ามีคีย์นี้อยู่หรือไม่เลย ต่างจาก Get ซึ่งส่งคืน "" เมื่อไม่มีคีย์
val, ok := f.Tag.Lookup("json")
if !ok { /* no json tag */ }ตรวจสอบอย่างรวดเร็ว
คุณจะอ่านค่าของแท็กโครงสร้าง "json" จาก reflect.StructField ได้อย่างไร
สรุป: ฟิลด์และแท็กของโครงสร้าง
ประเด็นสำคัญ:
- ใช้ reflect.TypeOf → .NumField() และ .Field(i) เพื่อรับข้อมูลเมตาของฟิลด์
- ใช้ StructField.Tag.Get("key") เพื่ออ่านค่าแท็ก
- แคชข้อมูลเมตาของฟิลด์ใน sync.Map เพื่อหลีกเลี่ยงการแยกวิเคราะห์ซ้ำ
- ใช้ Tag.Lookup เมื่อจำเป็นต้องแยกแยะระหว่างไม่มีแท็กกับสตริงว่าง
คำถามที่พบบ่อย
บทเรียน “ตรวจสอบฟิลด์และแท็กของสตรักต์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตรวจสอบฟิลด์และแท็กของสตรักต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตรวจสอบฟิลด์และแท็กของสตรักต์”
วนดูฟิลด์และอ่านแท็กของสตรักต์ คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ตรวจสอบฟิลด์และแท็กของสตรักต์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- reflect.Type และ reflect.Value
- ตรวจสอบฟิลด์และแท็กของสตรักต์
- การเรียกฟังก์ชันแบบไดนามิก
- การสะท้อนในทางปฏิบัติ: ตัวทำซีเรียลไลเซอร์