Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menyesuaikan JSON marshaling untuk `time.Time` dalam Go?

Bagaimanakah saya boleh menyesuaikan JSON marshaling untuk `time.Time` dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 03:09:30805semak imbas

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

Menyesuaikan JSON Marshaling for Time.Time

Dalam Go, fungsi Marshal generik daripada pakej pengekodan/json menyerikan masa. Nilai masa sebagai rentetan menggunakan format ISO 8601 lalai. Walau bagaimanapun, adalah mungkin untuk menyesuaikan gelagat ini dengan mengatasi reka letak yang digunakan untuk marshaling masa.

Pertimbangkan struct berikut:

<code class="go">type MyStruct struct {
    StartTime time.Time
    Name      string
}</code>

Untuk menggunakan reka letak masa tersuai semasa menyusun MyStruct ke JSON, kita boleh membenamkan masa.Taip masa dalam struct tersuai yang mengatasi kaedah MarshalText dan MarshalJSON. Berikut ialah contoh:

<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>

Dalam jenis tersuai ini, kami telah membenamkan masa. Masa dan menambah medan Reka Letak tambahan untuk menentukan rentetan reka letak yang dikehendaki. Dengan mengatasi kaedah MarshalText dan MarshalJSON, kami boleh mengawal pemformatan medan masa.

Untuk menggunakan CustomTime dengan struct anda, ganti medan time.Time dengan medan CustomTime dan mulakan medan Layout dengan reka letak yang dikehendaki rentetan. Contohnya:

<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>

Kod ini akan mensirikan tika MyStruct sebagai JSON, menggunakan reka letak masa yang ditentukan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyesuaikan JSON marshaling untuk `time.Time` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn