Cách xác định nhiều thẻ tên trong một cấu trúc


137

Tôi cần lấy một mục từ cơ sở dữ liệu mongo, vì vậy tôi đã định nghĩa một cấu trúc như thế này

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

Bây giờ tôi cũng cần mã hóa nó thành JSON, nhưng nó mã hóa các trường dưới dạng chữ hoa (tôi lấy PageId thay vì pageId) vì vậy tôi cũng cần xác định thẻ trường cho JSON. Tôi đã thử một cái gì đó như thế này nhưng nó không hoạt động:

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

Vì vậy, làm thế nào điều này có thể được thực hiện, xác định nhiều thẻ tên trong một cấu trúc?

Câu trả lời:


238

Nó nói trong tài liệu của reflectgói:

Theo quy ước, các chuỗi thẻ là sự kết hợp của các cặp khóa được phân tách bằng không gian tùy chọn: các cặp "giá trị". Mỗi khóa là một chuỗi không trống bao gồm các ký tự không điều khiển khác với khoảng trắng (U + 0020 ''), trích dẫn (U + 0022 '"') và dấu hai chấm (U + 003A ':'). Mỗi giá trị được trích dẫn sử dụng các ký tự U + 0022 '"và cú pháp chuỗi ký tự.

Điều bạn cần làm là sử dụng khoảng trắng thay vì dấu phẩy làm dấu tách chuỗi thẻ.

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

5
Ngoài ra, hãy chắc chắn rằng nó chỉ được phân tách bằng một khoảng trắng, không phải bởi một tab. xem stackoverflow.com/questions/20215510/
Mạnh

68

Cảm ơn câu trả lời được chấp nhận.

Dưới đây chỉ dành cho những người lười biếng như tôi.

SAI

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

CHÍNH XÁC

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.