>  기사  >  백엔드 개발  >  JSON의 후행 쉼표로 인해 Go에서 런타임 오류가 발생하는 이유는 무엇입니까?

JSON의 후행 쉼표로 인해 Go에서 런타임 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-28 03:24:30620검색

Why Do Trailing Commas in JSON Cause Runtime Errors in Go?

JSON 후행 쉼표: Go의 런타임 난제

복합 리터럴에서 후행 쉼표에 대한 Dave Cheney의 원칙은 JSON 구문 분석으로 확장됩니다. 그러나 기민한 Go 프로그래머는 후행 쉼표가 있는 JSON 데이터를 처리할 때 런타임 오류가 발생합니다. 이 문서에서는 이러한 동작의 근본적인 이유를 살펴봅니다.

세미콜론 규칙에 따라 후행 쉼표가 필요한 Go의 복합 리터럴과 달리 JSON 구문은 후행 쉼표를 엄격히 금지합니다. 다음 코드는 문제를 보여줍니다.

<code class="go">type jsonobject struct {
    Objects []ObjectType `json:"objects"`
}

type ObjectType struct {
    Name string `json:"name"`
}

func main() {
    bytes := []byte(`{ "objects":
        [
            {"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK!
        ]}`)
    jsontype := &jsonobject{}
    json.Unmarshal(bytes, &jsontype)
    fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range
}</code>

이 코드는 개체 슬라이스의 첫 번째 요소에 액세스하려고 시도할 때 "런타임 오류: 인덱스가 범위를 벗어났습니다"라는 메시지와 함께 패닉이 발생합니다. 이 오류가 발생하는 이유는 JSON 파서가 JSON의 형식이 올바른 것으로 예상하는데 위 예의 후행 쉼표로 인해 JSON이 유효하지 않기 때문입니다.

JSON 사양에 따르면 JSON에서는 후행 쉼표가 허용되지 않습니다. 배열 또는 맵. 따라서 Go의 구문에서 허용하더라도 JSON 파서는 이를 오류로 해석합니다. 이러한 동작은 상호 운용성을 유지하고 다양한 JSON 파서 간의 불일치를 방지하는 데 필수적입니다.

결론적으로 Go에서 후행 쉼표가 있는 JSON을 구문 분석할 때는 JSON 사양을 준수하고 이를 제거하는 것이 필수적입니다. 파서가 후행 쉼표를 허용하도록 강제하는 것은 바람직하지 않으며 예상치 못한 오류나 호환성 문제가 발생할 수 있습니다.

위 내용은 JSON의 후행 쉼표로 인해 Go에서 런타임 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.