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?

Sofia
sumber

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"`
}
ANisus
sumber
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"`
}
Benny
sumber