1. ホーム
  2. oop

[解決済み】Goのコンストラクタ

2022-04-01 01:21:25

質問

構造体がありますが、適切なデフォルト値で初期化されるようにしたいです。

一般的にはコンストラクタを使いますが、goは伝統的な意味でのOOPではないので、真のオブジェクトではなく、コンストラクタを持ちません。

initメソッドに気づきましたが、それはパッケージレベルのものです。 構造体レベルで使える似たようなものは他にないのでしょうか?

もしそうでなければ、Goでこの種のもののために受け入れられているベストプラクティスは何でしょうか?

どのように解決するのですか?

実は、ベストプラクティスは2つあります。

  1. 構造体のゼロ値を賢明なデフォルトにする。(これは、従来のオペレーティングシステムから来たほとんどの人にとっては奇妙に見えますが、多くの場合うまくいき、本当に便利です)。
  2. 関数を用意する func New() YourTyp または、そのような型がパッケージ関数に複数ある場合 func NewYourType1() YourType1 などがあります。

型のゼロ値が使用可能かどうかを文書化します(この場合、いずれかの New... 関数を使用します。("伝統主義者"のために、おっと。ドキュメントを読まない人は、たとえ未定義の状態のオブジェクトを作ることができなくても、あなたの型を正しく使うことはできないでしょう)。