Özel Etiket Ayrıştırma
Etiketleri yansıtma yoluyla okuyun
Özel Etiket Ayrıştırma, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Etiketleri Kendiniz Okuma
Kendi etiket anahtarlarınızı tanımlayabilir ve bunları çalışma zamanında reflect paketiyle okuyabilirsiniz. Bu, üst verilerle yönlendirilen özel davranışlar oluşturmanızı sağlar.
reflect.TypeOf
reflect.TypeOf, bir değeri açıklayan bir Type döndürür. Bir yapı Type'ından alanlarını inceleyebilirsiniz.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
}
func main() {
t := reflect.TypeOf(User{})
fmt.Println(t.Kind(), t.NumField())
}Alanlar Üzerinde Yineleme
NumField ve Field(i), bir yapı türünün tüm alanları üzerinde döngü kurmanızı sağlar.
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)
}
}Alan Etiketine Erişme
Her alanın reflect.StructTag türünde bir Tag değeri vardır. Belirli bir etiket değerini okumak için .Get(key) çağrısını yapın.
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"))
}Özel Etiket Tanımlama
İstediğiniz herhangi bir etiket anahtarını oluşturabilirsiniz. Burada özel label etiketi, her alan için kullanıcı dostu bir adı açıklar.
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"))
}
}İsteğe Bağlı Etiketler için Tag.Lookup
Tag.Lookup(key) değeri ve bir bool döndürür. Etiketinizin bulunmayabileceği alanları ele almak için bunu kullanın.
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)
}
}Alan Değerlerini de Okuma
Her alanın hem etiketini hem de mevcut değerini okumak için reflect.ValueOf ile türü birlikte kullanın.
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))
}Etiket Seçeneklerini Ayrıştırma
Etiket değeriniz seçenekleri bir arada içeriyorsa (örneğin name,opt), virgül üzerinde strings.Split kullanarak değeri kendiniz ayırın.
package main
import (
"fmt"
"strings"
)
func main() {
tag := "name,omitempty"
parts := strings.Split(tag, ",")
fmt.Println("name:", parts[0], "opts:", parts[1:])
}Küçük Bir Kullanım Örneği
Hepsini bir araya getirelim: bir yapıdan basit bir etiket eşlemesi oluşturun; kullanıcı arayüzü katmanı bunu form etiketlerini görüntülemek için kullanabilir.
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)
}Yansımanın Maliyeti
Yansıma güçlüdür ancak doğrudan yazılmış koddan daha yavaştır ve derleme zamanı denetimlerini devre dışı bırakır. Bunu yoğun döngülerde değil, çerçeve tarzı özellikler için kullanın.
İşaretçiler ve reflect
Bir işaretçiniz varsa alanları incelemeden önce temel yapı türüne ulaşmak için reflect.TypeOf(v).Elem() çağrısını yapın.
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"))
}Hızlı Kontrol
Yansıma yoluyla elde edilen bir yapı alanından özel bir etiket anahtarının değerini hangi yöntem okur?
Özet
Özel etiket ayrıştırma:
reflect.TypeOfkullanın ve alanlar üzerinde yineleme yapınfield.Tag.Get/Lookupetiket değerlerini okur- Seçenekleri ayrıştırmak için değerleri ayırın
- Güçlüdür ancak daha yavaştır; çerçeve özellikleri için kullanın
Sıkça Sorulan Sorular
“Özel Etiket Ayrıştırma” dersi ücretsiz mi?
Evet — “Özel Etiket Ayrıştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Özel Etiket Ayrıştırma” dersinde ne öğreneceğim?
Etiketleri yansıtma yoluyla okuyun Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Özel Etiket Ayrıştırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Struct Etiketleri Nedir
- JSON Etiketleri
- Doğrulama Kütüphaneleri
- Özel Etiket Ayrıştırma