表題の通りです.出オチのような名前です.
使い方やどういう挙動をするかという話題についてはREADME.mdのSynopsisをご覧いただければと思います.Javaのlombokをご存知の方はlombokの@Valueのような挙動をする,と言えばイメージしやすいでしょう.
基本的にはgo:generate
と組み合わせて使うことになるだろうと思います.
モチベーションとしてはREADME.mdのMotivationにも書きましたが,ザックリ言うと以下のような感じです:
- Structのフィールドをprivateかつimmutableに取り扱いたいことが多い
- フィールド (ないしはstruct) をimmutableに保つことについて,goでは基本的に「気をつける」しかないが,その際にはフィールドはprivateであるほうが嬉しい
- フィールドを破壊的に変更できる存在が絞られるのでコントロールしやすくなる
- フィールドをprivateにすると直接structを作るのが難しくなる
- 得てしていわゆるコンストラクタのようなものを作りがち
- structの定義に基づいてコンストラクタを自動で生成したい
- ついでにフィールドに対するgetterも生えていると便利なことが多いのでそれも自動生成したい
publicなフィールドを行儀悪くグイグイ書き換えるようなことはしないだろ〜,とは思いますが,しかし仕組みとしてできるということはできるという意味なので,そういうのはなるべく仕組み側でやりにくくしてしまうのが良いだろうと考えている次第です.
どうぞご利用ください.
それはそうとしてGitHub Actions便利ですね.