ホームページ バックエンド開発 Golang Golang で JSON にマーシャリングするときに time.Time レイアウトをカスタマイズするにはどうすればよいですか?

Golang で JSON にマーシャリングするときに time.Time レイアウトをカスタマイズするにはどうすればよいですか?

Nov 03, 2024 am 03:55 AM

How can I customize the time.Time layout when marshalling to JSON in Golang?

JSON マーシャリング用の Time.Time レイアウトのカスタマイズ

Golang のエンコーディング/json パッケージでは、time.Time 値のデフォルトのレイアウトは「2006」です。 -01-02T15:04:05Z」。ただし、カスタム書式文字列を使用するようにこのレイアウトをオーバーライドすることは可能です。

解決策:

time.Time フィールドの json.Marshal で使用されるレイアウトをオーバーライドするにはでは、time.Time を埋め込み、MarshalText インターフェイスを実装する新しい型を定義できます。このインターフェイスは、値のバイト表現を返すメソッドを定義します。以下のコードは、これを実現する方法を示しています。

<code class="go">package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type jsonTime struct {
    time.Time
    f string
}

func (j jsonTime) format() string {
    return j.Time.Format(j.f)
}

func (j jsonTime) MarshalText() ([]byte, error) {
    return []byte(j.format()), nil
}

func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}

func main() {
    jt := jsonTime{time.Now(), time.Kitchen}
    x := map[string]interface{}{
        "foo": jt,
        "bar": "baz",
    }
    data, err := json.Marshal(x)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s", data)
}</code>
ログイン後にコピー

このコードでは、jsonTime 構造体に time.Time 値が埋め込まれ、指定されたレイアウトを使用して時間を文字列として返すカスタム format() メソッドが定義されています。 。また、JSON マーシャリング中にカスタム文字列表現を返す MarshalText インターフェイスと MarshalJSON インターフェイスも実装します。

このアプローチを使用すると、JSON 出力の time.Time 値に使用されるレイアウトを制御し、特定の内容に従ってカスタマイズできます。要件。

以上がGolang で JSON にマーシャリングするときに time.Time レイアウトをカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

See all articles