사용자 정의 시간 유형 별칭을 사용한 예기치 않은 출력
사용자 정의 시간 유형 별칭을 비정렬화하려고 하면 결과 출력이 예상치 못한 것일 수 있습니다. 다음 코드를 고려하십시오.
<code class="go">type Time time.Time func main() { // Simplified unmarshal code for brevity st := Time(time.Parse(time.RFC3339, "2021-05-21T03:10:20.958450Z")) fmt.Printf("%v\n", st) }</code>
형식화된 시간을 예상하면 대신 출력에 다음이 표시됩니다.
&{958450000 63757163420 <nil>}
근본 원인
문제 Time 유형에 대한 fmt.Stringer 구현이 누락되어 있습니다. 기본적으로 fmt는 기본 time.Time 값의 필드를 중괄호로 표시하는 자체 형식화 논리를 사용합니다.
해결책
이 문제를 해결하려면 다음이 필요합니다. 두 가지 옵션:
time.Time의 String 메서드에 위임하는 String 메서드를 Time 유형에 추가합니다. :
<code class="go">func (t Time) String() string { return time.Time(t).String() }</code>
시간 유형을 별칭 대신 시간.시간을 포함하도록 변경합니다. 이는 String 메서드와 시간의 다른 모든 메서드를 자동으로 상속합니다.Time:
<code class="go">type Time struct { time.Time }</code>
추가 개선
<code class="go">func (st *Time) UnmarshalJSON(b []byte) error { var s string if err := json.Unmarshal(b, &s); err != nil { return err } t, err := time.ParseInLocation("2006-01-02T15:04:05", s, time.UTC) if err != nil { return err } *st = Time(t) return nil }</code>
위 내용은 정렬 해제 시 내 사용자 정의 시간 유형 별칭이 예기치 않은 결과를 출력하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!