Cara menentukan beberapa tag nama dalam sebuah struct


143

Saya perlu mendapatkan item dari database mongo, jadi saya mendefinisikan struct seperti ini

type Page struct {
    PageId string                 `bson:"pageId"`
    Meta   map[string]interface{} `bson:"meta"`
}

Sekarang saya juga perlu mengkodekannya ke JSON, tetapi mengkodekan bidang sebagai huruf besar (saya mendapatkan PageId daripada pageId) jadi saya juga perlu mendefinisikan tag bidang untuk JSON. Saya mencoba sesuatu seperti ini tetapi tidak berhasil:

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

Jadi bagaimana ini bisa dilakukan, menentukan beberapa tag nama dalam sebuah struct?

Jawaban:


249

Dikatakan dalam dokumentasi reflectpaket:

Menurut konvensi, string tag adalah rangkaian opsional kunci yang dipisahkan spasi: pasangan "nilai". Setiap kunci adalah string tidak kosong yang terdiri dari karakter non-kontrol selain spasi (U + 0020 ''), kutipan (U + 0022 '"'), dan titik dua (U + 003A ':'). Setiap nilai dikutip menggunakan karakter U + 0022 '"' dan sintaks literal string Go.

Yang perlu Anda lakukan adalah menggunakan spasi sebagai ganti koma sebagai pemisah string tag.

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}

5
Selain itu, pastikan hanya dipisahkan dengan spasi, bukan oleh tab. cf. stackoverflow.com/questions/20215510/…
GreenRaccoon23

68

Terima kasih atas jawaban yang diterima.

Di bawah ini hanya untuk orang-orang malas seperti saya.

SALAH

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

BENAR

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.