0Pricing
Go Academy · บทเรียน

ตรวจสอบฟิลด์และแท็กของสตรักต์

วนดูฟิลด์และอ่านแท็กของสตรักต์

ตรวจสอบฟิลด์และแท็กของสตรักต์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. reflect.Type และ reflect.Value
  2. ตรวจสอบฟิลด์และแท็กของสตรักต์
  3. การเรียกฟังก์ชันแบบไดนามิก
  4. การสะท้อนในทางปฏิบัติ: ตัวทำซีเรียลไลเซอร์
← กลับไปที่ Go Academy