วิธีกำหนดแท็กชื่อหลายแท็กในโครงสร้าง


143

ฉันต้องการรับไอเท็มจากฐานข้อมูล mongo ดังนั้นฉันจึงกำหนดโครงสร้างแบบนี้

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

ตอนนี้ฉันต้องเข้ารหัสเป็น JSON ด้วย แต่มันเข้ารหัสฟิลด์เป็นตัวพิมพ์ใหญ่ (ฉันได้รับ PageId แทนที่จะเป็น pageId) ดังนั้นฉันต้องกำหนดแท็กฟิลด์สำหรับ JSON ด้วย ฉันลองทำสิ่งนี้แล้วแต่ไม่ได้ผล:

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

แล้วสิ่งนี้จะทำได้อย่างไรกำหนดแท็กชื่อหลายแท็กในโครงสร้าง?

คำตอบ:


250

มีระบุไว้ในเอกสารของreflectแพ็คเกจ:

ตามแบบแผนสตริงแท็กคือการต่อกันของคีย์ที่คั่นด้วยช่องว่างซึ่งเป็นทางเลือก: คู่ "ค่า" แต่ละคีย์เป็นสตริงที่ไม่ว่างซึ่งประกอบด้วยอักขระที่ไม่ใช่ตัวควบคุมนอกเหนือจากช่องว่าง (U + 0020 '') เครื่องหมายคำพูด (U + 0022 '"') และโคลอน (U + 003A ':') แต่ละค่าจะถูกยกมา โดยใช้อักขระ U + 0022 "" "และ Go string literal syntax

สิ่งที่คุณต้องทำคือใช้ช่องว่างแทนเครื่องหมายจุลภาคเป็นตัวคั่นสตริงแท็ก

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

5
นอกจากนี้ตรวจสอบให้แน่ใจว่าคั่นด้วยช่องว่างไม่ใช่แท็บ cf. stackoverflow.com/questions/20215510/…
GreenRaccoon23

68

ขอบคุณสำหรับคำตอบที่ยอมรับ

ด้านล่างนี้เป็นเพียงสำหรับคนขี้เกียจเช่นฉัน

ไม่ถูกต้อง

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

แก้ไข

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.