Go에서 소문자 접두사가 있는 구조체 필드에 대한 JSON 생성 제한 탐색
Go에서 개발자는 JSON을 생성하려고 시도하는 동안 문제에 자주 직면합니다. 소문자 접두사 문자가 있는 필드를 소유하는 구조체입니다. 이 문제를 효과적으로 해결하려면 근본적인 이유를 이해하는 것이 중요합니다.
이 문제는 패키지 내에서 공개 식별자를 식별하는 Go의 규칙으로 인해 발생합니다. 대문자 첫 글자가 있는 식별자는 공개로 간주되며 패키지 외부에서 액세스할 수 있습니다. 반대로, 첫 글자가 소문자인 식별자는 비공개로 간주되며 현재 패키지 내에서만 표시됩니다.
다음 코드 조각을 고려하세요.
type Machine struct { m_ip string m_type string m_serial string }
다음 코드 조각을 고려하세요.
json.Marshal()을 사용하여 이 구조체를 생성하면 "{}"이라는 예상치 못한 결과가 나타날 수도 있습니다. 이는 m_ip, m_type 및 m_serial 필드가 비공개로 간주되어(소문자 접두사로 표시됨) json.Marshal()에 표시되지 않기 때문입니다.type Machine struct { MachIp string MachType string MachSerial string }
그러나 아래와 같이 필드를 대문자로 변경합니다. 을 사용하면 문제가 해결됩니다.
대문자 접두어를 활용하면 이러한 필드를 공개적으로 액세스할 수 있게 되어 다음을 허용할 수 있습니다. json.Marshal()을 사용하여 원하는 JSON 출력을 성공적으로 생성할 수 있습니다.type Machine struct { MachIp string `json:"m_ip"` MachType string `json:"m_type"` MachSerial string `json:"m_serial"` }
JSON 출력에 소문자 식별자가 필요한 경우 필드 태그 지정을 사용할 수 있습니다. 해당 JSON 이름으로 각 필드에 주석을 추가하면 기본 동작을 재정의할 수 있습니다. 예를 들면 다음과 같습니다.
이 태그 지정 메커니즘을 통해 초기 대소문자에 관계없이 원하는 JSON 필드 이름을 명시적으로 지정할 수 있으므로 애플리케이션 요구 사항에 맞는 JSON 출력을 생성할 수 있습니다.위 내용은 Go의 `json.Marshal()`이 소문자 접두어로 구조체 필드를 직렬화하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!