스택 오버플로를 유발하지 않고 UnmarshalJSON 내에서 json.Unmarshal 호출
문제:
UnmarshalJSON의 사용자 정의 구현 json.Unmarshal을 호출하면 스택이 발생할 수 있습니다.
해결책:
UnmarshalJSON 내에서 json.Unmarshal을 호출할 때 스택 오버플로 문제를 방지하려면 다음 기술을 활용하세요.
이론:
type 키워드를 사용하여 새 유형을 생성하면 원래 유형에서 모든 메소드가 효과적으로 제거됩니다. 마샬링 해제 프로세스 중에 래퍼 유형이 사용되면 JSON 디코더는 사용자 정의 UnmarshalJSON 구현을 찾지 않고 기본 구현을 사용합니다. 이렇게 하면 스택 오버플로 문제가 방지됩니다.
예:
Age 필드가 있는 Person 유형을 고려하세요.
type Person struct { Name string `json:"name"` Age int `json:"age"` } func (p *Person) UnmarshalJSON(data []byte) error { type personWrapper Person if err := json.Unmarshal(data, (*personWrapper)(p)); err != nil { return err } // Post-processing after unmarshaling: if p.Age < 0 { p.Age = 0 } return nil }
이 기술을 사용하면 사용자 정의가 가능합니다. 내에서 json.Unmarshal 호출과 관련된 스택 오버플로 문제를 피하면서 비정렬화 후 사후 처리 JSON을 비정렬화합니다.
위 내용은 UnmarshalJSON 내에서 json.Unmarshal을 호출할 때 스택 오버플로를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!