Time.Time에 대한 JSON 마샬링 사용자 정의
Go에서 인코딩/json 패키지의 일반 마샬 함수는 time.Time 값을 다음과 같이 직렬화합니다. 기본 ISO 8601 형식을 사용하는 문자열입니다. 그러나 시간 마샬링에 사용되는 레이아웃을 재정의하여 이 동작을 사용자 정의할 수 있습니다.
다음 구조체를 고려하세요.
<code class="go">type MyStruct struct { StartTime time.Time Name string }</code>
MyStruct를 JSON으로 마샬링할 때 사용자 정의된 시간 레이아웃을 사용하려면, MarshalText 및 MarshalJSON 메서드를 재정의하는 사용자 정의 구조체에 time.Time 유형을 포함할 수 있습니다. 예는 다음과 같습니다.
<code class="go">import ( "encoding/json" "time" ) type CustomTime struct { time.Time Layout string } func (ct CustomTime) MarshalText() ([]byte, error) { return []byte(ct.Format(ct.Layout)), nil } func (ct CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + ct.Format(ct.Layout) + `"`), nil }</code>
이 사용자 정의 유형에는 time.Time을 포함하고 추가 레이아웃 필드를 추가하여 원하는 레이아웃 문자열을 지정했습니다. MarshalText 및 MarshalJSON 메서드를 재정의하면 시간 필드의 형식을 제어할 수 있습니다.
구조체에서 CustomTime을 사용하려면 time.Time 필드를 CustomTime 필드로 바꾸고 레이아웃 필드를 원하는 레이아웃으로 초기화하세요. 끈. 예를 들면 다음과 같습니다.
<code class="go">type CustomMyStruct struct { StartTime CustomTime Name string } func main() { s := CustomMyStruct{ StartTime: CustomTime{ Time: time.Now(), Layout: "2006-01-02 15:04:05", }, Name: "ali", } data, err := json.Marshal(s) if err != nil { panic(err) } fmt.Println(string(data)) }</code>
이 코드는 지정된 시간 레이아웃을 사용하여 MyStruct 인스턴스를 JSON으로 직렬화합니다.
위 내용은 Go에서 `time.Time`에 대한 JSON 마샬링을 어떻게 사용자 정의할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!