공허 발견: Go의 언마샬링 프로세스에서 정의되지 않은 필드 인식
JSON 데이터를 Go 구조체로 언마샬링할 때 빈 값과 지정되지 않은 필드를 구별 데이터 불일치를 처리하는 데 필수적일 수 있습니다. 다음 예를 고려해 보세요.
var jsonBlob = []byte(`[ {"Name": "A", "Description": "Monotremata"}, {"Name": "B"}, {"Name": "C", "Description": ""} ]`) type Category struct { Name string Description string } var categories []Category err := json.Unmarshal(jsonBlob, &categories) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", categories)
이 코드를 실행하면 다음과 같은 출력이 생성됩니다.
[ {Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:} ]
보시다시피 정의되지 않은 "설명" 필드(예: "범주 B")와 빈 "설명" 필드("범주 C"와 같음)가 있습니다. 이러한 모호성은 잘못된 프로그램 동작으로 이어질 수 있습니다.
해결책: 포인터를 사용하여 구별
이 문제를 극복하려면 필드 유형을 포인터로 수정하면 됩니다. JSON 데이터에 빈 문자열 값이 포함되어 있으면 빈 문자열에 대한 포인터가 생성됩니다. 그러나 해당 필드가 JSON 데이터에 없으면 nil로 유지됩니다.
type Category struct { Name string Description *string }
이 수정을 통해 업데이트된 출력은 다음과 같습니다.
[ {Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158} ]
이제 쉽게 다음을 수행할 수 있습니다. 빈 값과 지정되지 않은 필드를 구별합니다. nil이 아닌 포인터는 빈 값을 나타내고 nil 포인터는 해당 필드가 JSON 데이터에 없음을 나타냅니다. 이를 통해 프로그램에서 이러한 사례를 다르게 처리하여 데이터 정확성과 적절한 동작을 보장할 수 있습니다.
위 내용은 Go에서 JSON을 언마샬링할 때 빈 필드와 정의되지 않은 필드를 어떻게 구별할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!