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で画像アップロード実装が楽になるかもしれないlaravel-imageup

1 はじめに2 環境3 導入4 実装5 個人的にハマったこと5.1 配列はダメ5.2 PHPStanで引っかかる6 さいごに7 おすすめ書籍 はじめに こんにちは。webアプリケーションを作る際にファ ...

新時代のPythonプロジェクト・パッケージ管理ツール「Rye」使ってみた

1 はじめに2 Ryeとは?3 Ryeを使ってみる3.1 Ryeのセットアップ3.2 仮想環境に入る3.3 依存パッケージの追加4 VSCodeから使ってみる5 さいごに6 おすすめ書籍 はじめに P ...

Laravelの開発環境をdocker-composeで一から構築してみる

1 はじめに2 nginxでwebサーバを立てる2.1 default.conf作成2.2 index.html作成2.3 nginxコンテナ起動3 nginxでPHP-FPMを動作させる3.1 do ...

rails

Capistrano3でRailsアプリケーションをデプロイする

1 はじめに1.1 前提条件2 Cpistranoについて3 導入3.1 Gemのインストール3.2 設定ファイルの準備4 デプロイ設定4.1 Capfileを修正する4.2 各環境で共通のデプロイ設 ...

麻雀で自分が何を切るか学習させる

1 はじめに2 プロジェクト名を決めてみる3 何切る問題で考慮される要素3.1 手牌3.2 ドラ3.3 考慮していない要素(本当は入れたい)4 学習の方法5 さいごに はじめに 前回執筆しました、配牌 ...

フォロー

blog-page_side_responsive

2025年2月
 1
2345678
9101112131415
16171819202122
232425262728  

アプリ情報

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