[Go言語]Stringerで出力形式をカスタマイズしよう!

こんにちは。KOUKIです。

2020年8月から新しい会社でGo言語エンジニアとして働き始める予定です^^

これまで以上にGo言語の理解を深める必要がありますね!

本日は、Stringerを用いてfmt.Printlnの出力形式をカスタマイズするお話をします。

Stringerとは

Stringerは、fmtパッケージに定義されているinterfaceです。

fmtパッケージは、文字出力等を行う機能が詰め込まれているパッケージですが、上記のインターフェースを利用することで、自分好みの出力形式にカスタマイズすることができます。

Stringerを使わない場合

まずは、Stringerを使わない場合のソースコードです。

Person Structを定義して、main関数で結果を出力しています。

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

Structの中身を出力しただけなので、パラメータの値が出力されました。

この出力結果を自分好みの形式で出力することが可能になります。

Stringerを使った場合

Go言語では、interfaceに定義された関数をメソッドとして定義すると暗黙的にinterfaceを実装したことになります。

つまり、先ほどのStringerインターフェースには、String()関数が定義されているので、これをメソッドとして定義するとStringerインターフェースを暗黙的に実装できます。

この状態の時、fmt.Printlnは、(p Person) String()メソッドを優先して処理の呼び出しを行います。

カスタマイズした出力結果が表示されましたね!

まとめ

パッケージに定義されているインターフェースを実装すれば、非常に柔軟性の高いプログラミングが可能になります。

今回紹介したStringer以外にもMarshalerのようなjson.Marshalのデフォルトの挙動を変更するインターフェースもあります。

使い方に慣れるまで大変ですが、プロのGo言語エンジニアを目指すものとしては、使いこなしたい機能ですね^^

それでは、また!

関連記事

参考書籍