Golang JSON 태그 이해
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- Golang JSON 태그는 struct 필드가 직렬화 및 역직렬화되는 방식을 제어합니다.
omitempty
및-
와 같은 옵션은 JSON 출력에서 필드 포함을 수정합니다.string
옵션은 숫자 및 부울 필드를 문자열로 직렬화하도록 강제합니다.
Go에서 struct 태그는 JSON 데이터의 인코딩 및 디코딩을 제어하는 데 중요한 역할을 합니다. json
태그를 활용하여 개발자는 struct 필드가 JSON 키에 매핑되는 방식을 사용자 정의하여 직렬화 (마샬링) 및 역직렬화 (언마샬링) 프로세스 모두에 영향을 줄 수 있습니다.
JSON 태그의 기본 사용법
다음과 같은 struct 정의를 고려하십시오.
type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` }
여기서 struct 태그는 각 필드에 해당하는 JSON 키 이름을 지정합니다.
Name
은"name"
에 매핑됩니다.Age
는"age"
에 매핑됩니다.Email
은"email"
에 매핑되지만omitempty
옵션이 포함됩니다.
omitempty
옵션은 Email
필드가 비어있는 경우 (즉, 0 값인 경우) JSON 출력에서 생략되도록합니다.
직렬화 중 필드 무시
JSON 직렬화에서 struct 필드를 제외하려면 -
태그를 사용하십시오.
type Person struct { Name string `json:"name"` Age int `json:"age"` Secret string `json:"-"` }
이 예제에서 Secret
필드는 마샬링 및 언마샬링 중에 무시됩니다.
omitempty
를 사용하여 빈 값 처리
omitempty
태그 옵션은 0 값을 가진 필드가 JSON 출력에 나타나지 않도록합니다.
type Person struct { Name string `json:"name"` Age int `json:"age,omitempty"` Email *string `json:"email,omitempty"` }
Age
가 0
이거나 Email
이 nil
인 경우 이러한 필드는 직렬화 된 JSON에서 생략됩니다.
string
태그 옵션 사용
string
옵션은 인코더에게 숫자 또는 부울 필드를 JSON 문자열로 직렬화하도록 지시합니다.
type Person struct { ID int `json:"id,string"` Name string `json:"name"` Active bool `json:"active,string"` }
여기서 ID
와 Active
는 JSON 출력에서 문자열로 표시됩니다.
다중 태그 및 리플렉션
Go는 다양한 목적을 위해 다중 태그를 지원합니다.
type Person struct { Name string `json:"name" xml:"name"` Age int `json:"age" xml:"age"` }
리플렉션을 사용하면 런타임에 이러한 태그를 검색 할 수 있습니다.
t := reflect.TypeOf(Person{}) field, _ := t.FieldByName("Name") jsonTag := field.Tag.Get("json") xmlTag := field.Tag.Get("xml")
결론
Go structs에서 JSON 태그를 이해하고 활용하면 JSON 직렬화 및 역직렬화를 정밀하게 제어 할 수 있으므로 Go 응용 프로그램과 다른 시스템 간의 원활한 데이터 교환이 가능합니다.
자세한 예제 및 고급 사용법은 공식 Go 설명서 및 커뮤니티 리소스를 참조하십시오.
FAQs
필드 이름은 camel case에서 기본 JSON 키로 사용됩니다.
예, 다른 인코딩 형식에 대해 여러 struct 태그를 사용할 수 있습니다.
json:"-"
를 사용하여 필드가 JSON 출력에 포함되지 않도록 합니다.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하십시오. 요청이나 요금이 없습니다.
타의 추종을 불허하는 비용 효율성
- 유휴 요금없이 사용한만큼 지불하십시오.
- 예 : $25는 평균 응답 시간 60ms에서 694 만 건의 요청을 지원합니다.
간소화 된 개발자 경험
- 간편한 설정을위한 직관적 인 UI.
- 완전 자동화 된 CI / CD 파이프 라인 및 GitOps 통합.
- 실행 가능한 통찰력을위한 실시간 메트릭 및 로깅.
손쉬운 확장 성 및 고성능
- 고도의 동시성을 쉽게 처리 할 수있는 자동 확장.
- 운영 오버 헤드가 없으므로 구축에 집중하십시오.
설명서에서 자세히 알아보십시오!
X에서 팔로우하세요 : @LeapcellHQ