Yapı Alanlarını ve Etiketlerini İnceleme
Alanlar üzerinde yineleme ve yapı etiketlerini okuma
Yapı Alanlarını ve Etiketlerini İnceleme, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. 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.
StructField türü
reflect.StructField, bir yapının tek bir alanını açıklar: Name, Type, Tag, Index, Offset, Anonymous ve IsExported.
Alanlar üzerinde yineleme
Bir yapı türünün tüm alanları üzerinde döngü kurun:
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())
}Yapı etiketlerini okuma
Etiketlere StructField.Tag.Get("key") aracılığıyla erişilir:
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"Etiket seçeneklerini ayrıştırma
Etiketler virgülle ayrılmış seçenekler içerebilir. Bunları strings.Split ile ayrıştırın:
tag := f.Tag.Get("json") // "name,omitempty"
parts := strings.Split(tag, ",")
name := parts[0] // "name"
omitempty := len(parts) > 1 && parts[1] == "omitempty"FieldByName ve FieldByIndex
Bir alanı adına veya dizinine göre arayın. FieldByName, yapıdaki ve gömülü yapılardaki dışa aktarılan alanları arar:
f, ok := reflect.TypeOf(User{}).FieldByName("Name")
if ok { fmt.Println(f.Tag.Get("json")) }Gömülü yapı alanları
Gömülü yapılarda Anonymous true değerindedir. İç içe alanlara erişmek için Type.FieldByIndex([]int{0,1}) kullanın.
Dışa aktarılmamış alanlar
Dışa aktarılmamış (küçük harfle başlayan) alanlar türleri ve etiketleri için incelenebilir ancak değerleri yansıtma yoluyla okunamaz veya ayarlanamaz; bunun sonucunda bir panik oluşur.
Alan önbelleği oluşturma
Yapı etiketlerini her çağrıda ayrıştırmak maliyetlidir. Sonucu reflect.Type anahtarıyla bir sync.Map içinde önbelleğe alın:
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
}Kullanım alanı: basit ORM
Bir INSERT sütun listesini dinamik olarak oluşturmak için "db" etiketine sahip tüm alanlar üzerinde dolaşın:
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...
}Kullanım alanı: yapılandırma yükleyicisi
"env" etiketine sahip yapı alanları üzerinde dolaşın ve bunları ortam değişkenlerinden doldurun:
if env := f.Tag.Get("env"); env != "" {
if val := os.Getenv(env); val != "" {
v.Field(i).SetString(val)
}
}StructTag.Lookup
Tag.Lookup("key"), etiket değerini ve anahtarın mevcut olup olmadığını belirten bir boole değeri döndürür (mevcut olmayan anahtarlar için "" döndüren Get'in aksine).
val, ok := f.Tag.Lookup("json")
if !ok { /* no json tag */ }Hızlı kontrol
Bir reflect.StructField değerinden "json" yapı etiketinin değerini nasıl okursunuz?
Özet: Yapı alanları ve etiketler
Ana noktalar:
- Alan meta verileri için reflect.TypeOf → .NumField(), .Field(i)
- Etiket değerlerini okumak için StructField.Tag.Get("key")
- Tekrarlanan ayrıştırmayı önlemek için alan meta verilerini sync.Map içinde önbelleğe alın
- Eksik etiket ile boş dize arasındaki fark önemli olduğunda Tag.Lookup kullanın
Sıkça Sorulan Sorular
“Yapı Alanlarını ve Etiketlerini İnceleme” dersi ücretsiz mi?
Evet — “Yapı Alanlarını ve Etiketlerini İnceleme” 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.
“Yapı Alanlarını ve Etiketlerini İnceleme” dersinde ne öğreneceğim?
Alanlar üzerinde yineleme ve yapı etiketlerini okuma 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 2. dersidir.
“Yapı Alanlarını ve Etiketlerini İnceleme” 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
- reflect.Type ve reflect.Value
- Yapı Alanlarını ve Etiketlerini İnceleme
- Dinamik İşlev Çağrıları
- Uygulamalı Yansıma: Serileştiriciler