BackEnd

Go 1.24で追加されたjsonのomitzero

投稿日:

はじめに

2025年2月11日にGoの1.24がリリースされました。

そこで、今回は更新点に軽く触れつつ、新しく追加された encoding/jsonomitzero タグについて紹介します。

1.24の更新点

Go 1.24では多くの機能追加や変更点があります。その中で目に止まったものをいくつか列挙します。

  1. go get コマンドに -tool フラグを追加
  2. Runtimeの改善によりCPUのoverheadが平均2〜3%ほど減少した
  3. os.Root 型の追加
  4. 弱い参照を提供する weak パッケージの追加
  5. 暗号化関連の機能強化多数
  6. bytes パッケージと strings パッケージに iterator を扱う関数が追加
  7. encoding/json パッケージに omitzero タグを追加

詳細については、 Release Notes をご覧ください。

jsonのomitzeroタグ

omitzero タグは構造体をMarshalする際にフィールドがゼロ値の場合は省略してくれるオプションです。

似たようなオプションに omitempty タグがありますが、こちらは 0""nil の場合には省略されます。しかし、構造体の場合は省略されず以下のようになってしまいます。

これが、 omitzero タグを使うことで解決できます。

Go 1.23までの場合

まずは、これまで通り omitempty タグを使った場合を見ていきます。

以下のようになります。

コード

結果

このように time.Time だけは初期値で含まれてしまっています。これを回避するために、あえてポインタ型にする対応が取られることがありました。

コード

結果

Go 1.24での場合

omitempty の代わりに omitzero を使った場合以下のようになります。

コード

結果

このように、ポインタ型にしなくても省略することができました。

要素が空の場合とnilの場合

omitempty の場合、要素が空であっても、 nil でも区別なく省略されてしまいますが、 omitzero の場合、これらは別々のものとして扱われます。

コード

結果

このように、 omitzero の場合、要素が空の場合は省略されません。

omitzeroをコントロールする

omitzero で省略するかどうかは IsZero メソッドで判定されます。そのため、自分で定義した構造体にこのメソッドを定義することで、どのような状態の場合に省略するのかコントロールすることができます。

コード

結果

このように IsZero メソッドの戻り値が true の場合は省略されるようになります。

さいごに

encoding/json に追加された omitzero タグについて紹介しました。

大きな変更点というわけではありませんが、かゆいところに手が届く良い機能だと思います。

おすすめ書籍

初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド Go言語 100Tips ありがちなミスを把握し、実装を最適化する impress top gearシリーズ 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス Go言語で学ぶ並行プログラミング 他言語にも適用できる原則とベストプラクティス impress top gearシリーズ

blog-page_footer_336




blog-page_footer_336




-BackEnd
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

laravel logo

Laravelの開発環境構築

1 はじめに2 開発環境構築2.1 Homestead2.2 Laradock3 Laradockで開発環境構築3.1 Laradockのダウンロード3.2 コンテナの設定ファイルを作成3.3 コンテ ...

Rust入門してみた (基本構文編)

1 はじめに2 Rustとは?3 Rustの特徴的な基本構文3.1 変数と定数3.2 所有権3.3 所有権の借用3.4 関数3.5 エラーハンドリング3.5.1 回復不能なエラー(panic!)3.5 ...

laravel logo

Laravel Admin でCSVインポートを実装する

1 はじめに2 下準備2.1 Laravel Adminの導入2.2 Laravel Excelの導入3 Laravel Excelの実装3.1 Importクラスの作成3.2 モデルのfillabl ...

Vue.js+TypeScriptな環境整備

1 はじめに2 vue-cliのインストール3 プロジェクトの作成3.1 機能の選択3.2 シンタックスの選択3.3 CSSプリプロセッサの設定3.4 Unit test3.5 E2E test3.6 ...

Go言語

Goのクエリビルダー goqu を使ってみる

1 はじめに2 goquとは2.1 対応するDB3 基本的な使い方3.1 Insert句を生成する3.2 Select句を生成する3.3 Update句を生成する3.4 Delete句を生成する4 よ ...

フォロー

blog-page_side_responsive

2025年2月
 1
2345678
9101112131415
16171819202122
232425262728  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。