自訂Time.Time 的JSON 編組
在Go 中,encoding/json 套件中的通用Marshal 函數將time.Time 值序列化為使用預設ISO 8601 格式的字串。但是,可以透過覆寫用於時間封送的佈局來自訂此行為。
考慮以下結構:
<code class="go">type MyStruct struct { StartTime time.Time Name string }</code>
要在將MyStruct 封送為JSON 時使用自訂時間佈局,我們可以將time.Time 類型嵌入到重寫MarshalText 和MarshalJSON 方法的自訂結構中。下面是一個範例:
<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 字段,並使用所需的佈局初始化 Layout 字段細繩。例如:
<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中文網其他相關文章!