잘못된 형식의 날짜/시간 역마샬링
Go에서 JSON 날짜/시간을 역마샬링할 때 JSON에 제공된 시간대 오프셋의 형식이 잘못된 경우 일반적인 문제가 발생합니다. . RFC3339에 따르면 예상되는 형식은 콜론이 있는 02:00이지만 일부 소스에서는 콜론 없이 0200으로 출력할 수도 있습니다.
사용자 정의 역마샬링 솔루션
To 이러한 불일치를 처리하려면 두 형식을 모두 지원하는 사용자 정의된 시간 필드 유형을 정의할 수 있습니다.
<code class="go">type MyTime struct { time.Time } func (self *MyTime) UnmarshalJSON(b []byte) (err error) { s := string(b) s = s[1:len(s)-1] // Remove the quotes t, err := time.Parse(time.RFC3339Nano, s) if err != nil { t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s) } self.Time = t return }</code>
이 솔루션은 UnmarshalJSON 메서드를 활용하여 먼저 JSON 문자열에서 따옴표를 제거합니다. 그런 다음 표준 RFC3339Nano 형식을 사용하여 날짜/시간 구문 분석을 시도합니다. 실패하면 시간대 오프셋에서 콜론을 제거하는 수정된 형식을 구문 분석합니다.
구조체 통합
이 유형을 구조체에 통합하려면 다음을 정의하세요.
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
이렇게 하면 시간대 오프셋이 콜론으로 구분되어 있는지 여부에 관계없이 Time 필드가 올바른 날짜와 시간으로 채워져 JSON을 테스트 구조로 역마샬링할 수 있습니다.
시간 형식에 대한 참고 사항
시간 형식 문자열에 2006년을 사용하는 것은 Go 초기 릴리스의 역사적 유물입니다. 실질적인 의미가 없으며 날짜/시간의 정확성이나 형식에 영향을 미치지 않습니다.
위 내용은 Go에서 잘못된 형식의 날짜/시간을 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!