구조체에서 여러 이름 태그를 정의하는 방법


137

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"`
}

그렇다면 어떻게 할 수 있습니까? 구조체에서 여러 이름 태그를 정의합니까?

답변:


239

reflect패키지 문서에 나와 있습니다 .

일반적으로 태그 문자열은 선택적으로 공백으로 구분 된 키 : "값"쌍으로 연결됩니다. 각 키는 공백 (U + 0020 ''), 따옴표 (U + 0022 ' "') 및 콜론 (U + 003A ':') 이외의 비 제어 문자로 구성된 비어 있지 않은 문자열입니다. U + 0022 ' "'문자 및 Go 문자열 리터럴 구문을 사용합니다.

태그 문자열 구분 기호로 쉼표 대신 공백을 사용해야합니다.

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.