>  기사  >  백엔드 개발  >  Go에서 `time.Time`에 대한 JSON 마샬링을 어떻게 사용자 정의할 수 있나요?

Go에서 `time.Time`에 대한 JSON 마샬링을 어떻게 사용자 정의할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 03:09:30805검색

How can I customize JSON marshaling for `time.Time` in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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