CodeBlanks Logo Icon CodeBlanks

Struct etiketleri

json:"..." etiketleriyle alan adlarını kontrol etmeyi öğrenirsin.

Struct etiketleri

JSON alan adları genellikle küçük harflidir. Struct etiketi Go alan adını JSON adına eşler ve ek seçenekler verir:

type Kullanici struct {
    ID      int    `json:"id"`
    Ad      string `json:"ad"`
    Eposta  string `json:"eposta,omitempty"`
    Sifre   string `json:"-"`
}

omitempty sıfır değerli alanı çıktıdan atar; - alanı her zaman atlar (parola gibi gizli alanlar için).

Etiket sözdizimi

Etiketler ters tırnak içinde anahtar:"değer" çiftleridir; birden çok kütüphane aynı alanda kendi anahtarını kullanabilir:

Ad string `json:"ad" db:"ad_soyad" validate:"required"`

Çözerken (Unmarshal) JSON anahtarları etiketlere büyük/küçük harf duyarsız eşlenir. Bilinmeyen anahtarlar sessizce yok sayılır; bunu reddetmek için Decoder.DisallowUnknownFields() kullanılır.

Uygulama Etiketli kodlama

type User struct yaz: ID int → "id", Name string → "name", Email string → "email,omitempty", Password string → "-". User{ID: 1, Name: "Ada", Password: "x"} değerini kodlayıp yazdır.

Başlangıç kodu

main.go
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    ID       int    `json:"id"`
    Name     string `json:"name"`
    Email    string `json:"email,omitempty"`
    Password string `json:"-"`
}

func main() {
    b, err := json.Marshal(User{ID: 1, Name: "Ada", Password: "x"})
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}

Beklenen çıktı

{"id":1,"name":"Ada"}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>`json:"adet,omitempty"`</code> etiketli <code>int</code> alanın değeri 0 ise ne olur?

  • "adet":null yazılır
  • Marshal hata verir
  • Alan JSON'a hiç yazılmaz Doğru cevap
  • "adet":0 yazılır

Açıklama: omitempty sıfır değerleri (0, "", false, nil, boş dilim/map) atar; 0'ın anlamlı olduğu alanlarda dikkatli kullanılmalı ya da *int tercih edilmelidir.

2 Gizli alan

Soru
type Hesap struct {
    Ad    string `json:"ad"`
    Token string `json:"____"`
}
Cevap
type Hesap struct {
    Ad    string `json:"ad"`
    Token string `json:"-"`
}

Açıklama: json:"-" alanı her zaman kodlamadan ve çözmeden çıkarır.

3 Etiket ve etkisi

Kavram Anlamı
json:"id" Adı değiştirir
json:",omitempty" Sıfırsa atlar
json:"-" Her zaman atlar
json:",string" Sayıyı metin yazar

Orta seviye bölümündeki tüm dersler