[Golang]MarshalとUnMarshalの使い方メモ

GolangのMarshalとUnMarshalの使い方を学んだので、メモしておきます。

ネットワークプログラミングをする時に、使用する可能性がかなり高いです。

UnMarshalについて

最初にUnMarshalについて説明します。

UnMarshalは、ネットワーク越しに送られたデータ(例えばJson)をGo言語のStruct構造体に変換してくれます。

上記は、Book Structを用意して、byte(ネットワーク越しのjsonデータはbyteの形式で送られてくる)データをUnMarshalしています。

プログラムを実行してみましょう。

注意するべき点は、BookのTitleとNameです。名前の先頭が大文字でないとデータの変換ができません。Go言語では、先頭を大文字にするとPublic、小文字にするとPrivate扱いになるからです。

少し、試してみましょう。

Bookのtitleとpriceを小文字にしました。この状態でプログラムを実行するとデータ変換はされず、それぞれのTypeのデフォルト値が表示されます。(string->空文字、int -> 0)

Marshalについて

Marshalは、GoのStructをjsonに変換します。

プログラムを実行してみましょう。

jsonに変換されましたね。

JSONのカラム変更

通常、JSONのカラムは小文字が使われます。そのため、TitleとPriceは小文字になっていることが理想です。

便利なことに、Go言語では任意の形式に変換する術を用意しています。

Book Structを以下の様に変更してください。

プログラムを実行します。

Title->title、Price->priceに変換されていることがわかります。

データ型の変換

その他にもint->stringに変換することも可能です。

データの秘匿

戻り値のデータの一部を隠したい場合もあると思います。

例えば、パスワードとかですね。

Passwordを新しく追加しました。その場合のjsonタグには「-」を指定しています。

プログラムを実行するとPasswordが表示されないことがわかります。

omitemptyについて

omitemptyは、データが空の場合にデータを非表示にするタグです。

例えば、Titleを空にしてみます。

実行します。

Marshalのカスタマイズ

Marshalをカスタマイズすることもできます。

MarshalJSON」でないとカスタマイズできません。Marshalが呼ばれた時に自動的にMarshalJSONメソッドが呼ばれる様になります。

プログラムを実行してみましょう。

UnMarshalのカスタマイズ

Marshalと同様にUnMarshalも「UnmarshalJSON」を使用すれば、カスタマイズできます。

プログラムを実行します。

おわりに

前述の通り、MarshalとUnMarshalは、ネットワークプログラミングで使用用途が高いものだと思います。

しっかり、理解していきたいですね。

それでは、また!

コメントを残す