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

Mary-Kate Olsen
Lepaskan: 2024-11-02 03:09:30
asal
804 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!