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


関連記事

Go言語

Go 1.18のGenericsを使った地味に便利な関数を紹介

1 はじめに2 関数の紹介2.1 解決したいこと2.2 関数の内容3 さいごに4 おすすめ書籍 はじめに 3月15日にリリースされたGo 1.18で、ついにGenericsがサポートされました(Goの ...

[Dialogflow + CF] アクア様が罵倒してくれたり天気を教えてくれるSlackボットを作る

1 はじめに2 Dialogflowの準備2.1 プロジェクトを作る2.2 Intentを作る2.3 試してみる2.4 WELCOME Intentを作る3 Slackボットを作る4 名前を答える5 ...

rails

さらば「rails migrate」、よろしく「ridgepole」

1 はじめに2 Ridgepoleとは3 rails migrateではなく、Ridgepoleを選定した理由4 rails migrateからRidgepoleへの移行手順5 capistrano3 ...

php logo

PHPでGmail APIを利用してメールデータを取得してみる その2

1 はじめに2 メールの内容取得3 MessagePartオブジェクト3.1 件名3.2 本文4 multipartの場合4.1 本文の取得5 全文6 さいごに7 おすすめ書籍 はじめに 前回は、Gm ...

WebアプリケーションにLINEログインを組み込む

1 はじめに2 LINEログインとは2.1 LINEログインでできること2.2 LINEログインのフロー3 LINEログインの設定3.1 プロバイダーを新規作成する3.2 チャネルを作成する3.3 リ ...

フォロー

blog-page_side_responsive

2025年2月
 1
2345678
9101112131415
16171819202122
232425262728  

アプリ情報

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