0Pricing
Go Academy · Ders

Ö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.TypeOf kullanın ve alanlar üzerinde yineleme yapın
  • field.Tag.Get / Lookup etiket 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

  1. Struct Etiketleri Nedir
  2. JSON Etiketleri
  3. Doğrulama Kütüphaneleri
  4. Özel Etiket Ayrıştırma
← Go Academy Sayfasına Dön