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の認可機能Gateを使ってみた

1 はじめに2 やる事3 Gate3.1 登録3.2 利用4 Policy5 ミドルウェアでの使用6 さいごに7 おすすめ書籍 はじめに Laravelには認可機能を簡単に実装出来るGateという機能 ...

Go言語

goroutineとchannelとContext

1 はじめに2 並行処理と並列処理3 goroutine4 channel4.1 channelからデータ受信4.2 for-range でのデータ受信4.3 複数のchannelを受信4.4 buf ...

RubyのHanamiチュートリアルをやってみた

1 はじめに2 紹介2.1 Hanamiとは?2.2 Hanamiを選ぶ理由2.2.1 軽量2.2.2 アーキテクチャとして2.2.3 スレッドセーフ3 チュートリアルのための準備4 実践4.1 はじ ...

PHPerだけどKotlinを勉強したって良いよね その1〜クラス編〜

1 はじめに2 インターフェース2.1 基本2.2 デフォルト実装付メソッド2.3 同じメソッド名を持つ複数のインターフェース3 修飾子3.1 open3.2 abstract4 可視性修飾子5 さい ...

Go言語

Go 1.19でGoDocに追加された機能

1 はじめに2 GoDocの機能追加2.1 セクションタイトル(Headings)2.2 リンク2.3 リスト2.4 パッケージの追加3 おまけ4 さいごに5 おすすめ書籍 はじめに 8月2日にGo ...

フォロー

blog-page_side_responsive

2025年2月
 1
2345678
9101112131415
16171819202122
232425262728  

アプリ情報

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