การแยกวิเคราะห์แท็กแบบกำหนดเอง
อ่านแท็กผ่านการสะท้อน
การแยกวิเคราะห์แท็กแบบกำหนดเอง เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
การอ่านแท็กด้วยตนเอง
คุณสามารถกำหนดคีย์แท็กของตนเองและอ่านคีย์เหล่านั้นขณะทำงานด้วยแพ็กเกจ reflect วิธีนี้ช่วยให้คุณสร้างพฤติกรรมแบบกำหนดเองที่ขับเคลื่อนด้วยข้อมูลกำกับ
reflect.TypeOf
reflect.TypeOf คืนค่าชนิดที่อธิบายค่าใดค่าหนึ่ง จากชนิดของโครงสร้าง คุณสามารถตรวจสอบฟิลด์ของโครงสร้างได้
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
}
func main() {
t := reflect.TypeOf(User{})
fmt.Println(t.Kind(), t.NumField())
}การวนดูฟิลด์
NumField และ Field(i) ช่วยให้คุณวนดูฟิลด์ทุกฟิลด์ของชนิดโครงสร้างได้
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
Age int
}
func main() {
t := reflect.TypeOf(User{})
for i := 0; i < t.NumField(); i++ {
fmt.Println(t.Field(i).Name)
}
}การเข้าถึงแท็กของฟิลด์
แต่ละฟิลด์มี Tag ชนิด reflect.StructTag เรียกใช้ .Get(key) เพื่ออ่านค่าของแท็กที่ระบุ
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string "label:\"Full Name\""
}
func main() {
f := reflect.TypeOf(User{}).Field(0)
fmt.Println(f.Tag.Get("label"))
}การกำหนดแท็กแบบกำหนดเอง
คุณสามารถสร้างคีย์แท็กใดก็ได้ ในที่นี้แท็กแบบกำหนดเอง label ใช้อธิบายชื่อที่อ่านเข้าใจง่ายสำหรับแต่ละฟิลด์
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email Address\""
City string "label:\"City\""
}
func main() {
t := reflect.TypeOf(Form{})
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Println(f.Name, "->", f.Tag.Get("label"))
}
}Tag.Lookup สำหรับแท็กที่ไม่บังคับ
Tag.Lookup(key) คืนค่าค่าและค่าบูลีนหนึ่งค่า ใช้เมธอดนี้เพื่อจัดการกับฟิลด์ที่อาจไม่มีแท็กของคุณ
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email\""
Token string
}
func main() {
t := reflect.TypeOf(Form{})
for i := 0; i < t.NumField(); i++ {
v, ok := t.Field(i).Tag.Lookup("label")
fmt.Println(t.Field(i).Name, v, ok)
}
}การอ่านค่าของฟิลด์ด้วย
ใช้ reflect.ValueOf ร่วมกับชนิดของข้อมูลเพื่ออ่านทั้งแท็กและค่าปัจจุบันของแต่ละฟิลด์
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email\""
}
func main() {
f := Form{Email: "a@b.com"}
t := reflect.TypeOf(f)
v := reflect.ValueOf(f)
fmt.Println(t.Field(0).Tag.Get("label"), "=", v.Field(0))
}การแยกวิเคราะห์ตัวเลือกของแท็ก
หากค่าแท็กของคุณรวมตัวเลือกไว้ด้วยกัน (เช่น name,opt) ให้แยกค่าเองด้วย strings.Split โดยใช้จุลภาคเป็นตัวคั่น
package main
import (
"fmt"
"strings"
)
func main() {
tag := "name,omitempty"
parts := strings.Split(tag, ",")
fmt.Println("name:", parts[0], "opts:", parts[1:])
}กรณีใช้งานขนาดเล็ก
เมื่อนำทุกอย่างมารวมกัน คุณสามารถสร้างแมปป้ายกำกับอย่างง่ายจากโครงสร้าง ซึ่งชั้นติดต่อผู้ใช้สามารถนำไปใช้แสดงป้ายกำกับของแบบฟอร์มได้
package main
import (
"fmt"
"reflect"
)
type Profile struct {
Name string "label:\"Your Name\""
Bio string "label:\"About You\""
}
func main() {
t := reflect.TypeOf(Profile{})
labels := map[string]string{}
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
labels[f.Name] = f.Tag.Get("label")
}
fmt.Println(labels)
}ต้นทุนของรีเฟลกชัน
รีเฟลกชันมีประสิทธิภาพมาก แต่ช้ากว่าโค้ดโดยตรงและข้ามการตรวจสอบระหว่างการคอมไพล์ ควรใช้กับฟีเจอร์ลักษณะเฟรมเวิร์ก ไม่ใช่ในลูปที่ทำงานบ่อย
พอยน์เตอร์และ reflect
หากคุณมีพอยน์เตอร์ ให้เรียกใช้ reflect.TypeOf(v).Elem() เพื่อเข้าถึงชนิดโครงสร้างที่อยู่ภายในก่อนตรวจสอบฟิลด์
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string "label:\"Name\""
}
func main() {
u := &User{}
t := reflect.TypeOf(u).Elem()
fmt.Println(t.Field(0).Tag.Get("label"))
}ตรวจสอบอย่างรวดเร็ว
เมธอดใดใช้สำหรับอ่านค่าของคีย์แท็กแบบกำหนดเองจากฟิลด์ของโครงสร้างที่ได้มาผ่านรีเฟลกชัน
สรุปทบทวน
การแยกวิเคราะห์แท็กแบบกำหนดเอง:
- ใช้
reflect.TypeOfและวนดูฟิลด์ field.Tag.Get/Lookupใช้อ่านค่าแท็ก- แยกค่าเพื่อวิเคราะห์ตัวเลือก
- มีประสิทธิภาพมากแต่ช้ากว่า ควรใช้กับฟีเจอร์ของเฟรมเวิร์ก
คำถามที่พบบ่อย
บทเรียน “การแยกวิเคราะห์แท็กแบบกำหนดเอง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแยกวิเคราะห์แท็กแบบกำหนดเอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแยกวิเคราะห์แท็กแบบกำหนดเอง”
อ่านแท็กผ่านการสะท้อน คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การแยกวิเคราะห์แท็กแบบกำหนดเอง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แท็กสตรักต์คืออะไร
- แท็ก JSON
- ไลบรารีตรวจสอบความถูกต้อง
- การแยกวิเคราะห์แท็กแบบกำหนดเอง