他のプログラミング言語のコンストラクターの一般的な関数と特徴は次のとおりです。
- 各クラスはコンストラクターを追加でき、関数のオーバーロードを使用して複数のコンストラクターが実装されます。
- コンストラクターは通常、クラス名と同じ名前を持ち、戻り値はありません。
- コンストラクターには静的コンストラクターがあり、これは通常、親クラスのコンストラクターを呼び出すために使用されます。
- C++の場合、デフォルト コンストラクター、コピー コンストラクターなどが存在します。
構造体を作成および初期化する複数の方法 – コンストラクターのオーバーロードをシミュレート
構造体を使用して猫の特徴を記述する場合、色と名前に従ってさまざまな種類の猫が存在する可能性があり、さまざまな色と名前が構造体のフィールドとなり、色と名前を使用してインスタンスを構築できます。このプロセスでは、次のコードを参照できます。
type Cat struct {
Color string
Name string
}
func NewCatByName(name string) *Cat {
return &Cat{
Name: name,
}
}
func NewCatByColor(color string) *Cat {
return &Cat{
Color: color,
}
}
コードの説明は次のとおりです。
- 行 1 は、色と名前のフィールドを含む Cat 構造体を定義します。
- 6 行目では、名前を指定して cat 構造体を構築し、Cat ポインタを返す関数を定義しています。
- 7 行目はアドレスを取得し、cat 構造体をインスタンス化します。
- 8 行目では、色のフィールドを無視して、猫の名前フィールドを初期化します。
- 12 行目では、色を使用して cat 構造体を構築し、Cat ポインタを返す関数を定義しています。
この例では、color と name の 2 つの属性の型は両方とも文字列ですが、Go 言語には関数のオーバーロードがないため、関数名の競合を避けるために、2 つの異なる関数名 NewCatByName() と NewCatByColor() が使用されています。 、さまざまな Cat 構築プロセスを表すために使用されます。
親子関係を持つ構造体の構築と初期化 – 親レベルの構築呼び出しのシミュレーション
黒猫は猫の一種であり、猫は黒猫の総称である この二つの概念を同時に記述する場合に導出されます 黒猫は猫の種類から導出されます 構造を用いて関係を記述する場合猫と黒猫の間では、猫 (Cat) 構造体が BlackCat (BlackCat) に埋め込まれており、黒猫が猫の特徴を持つことを示します。次に、2 つの異なるコンストラクターを使用して、黒猫と猫の 2 つの構造体インスタンスをそれぞれ構築します。参照次のコードに:
type Cat struct {
Color string
Name string
}
type BlackCat struct {
Cat // Catを埋め込む。派生に似た機能
}
// "基底クラスのコンストラクタ"
func NewCat(name string) *Cat {
return &Cat{
Name: name,
}
}
// "派生クラスのコンストラクタ"
func NewBlackCat(color string) *BlackCat {
cat := &BlackCat{}
cat.Color = color
return cat
}
コードの説明は次のとおりです。
- 6 行目は BlackCat 構造体を定義し、Cat 構造体を埋め込んでおり、BlackCat は Cat のすべてのメンバーを持ち、インスタンス化後は Cat のすべてのメンバーに自由にアクセスできます。
- 11 行目で、NewCat() 関数は Cat の構築プロセスを定義し、名前をパラメータとして使用して、Cat 構造体を埋めます。
- 18 行目で、NewBlackCat() はパラメータとして color を使用し、BlackCat ポインタを構築して返します。
- 19行目ではBlackCat構造体がインスタンス化されており、同時にCatもインスタンス化されています。
- 行 20、BlackCat に埋め込まれた Cat color プロパティを入力します。BlackCat にはメンバーがありません。すべてのメンバーは Cat からのものです。
この例では、Cat 構造はオブジェクト指向の「基本クラス」に似ています。BlackCat には、オブジェクト指向の「派生」に似た Cat 構造が埋め込まれています。インスタンス化するとき、BlackCat の Cat もインスタンス化されます。 。
つまり、Go言語にはコンストラクタに関する特別な仕組みは用意されておらず、ユーザーは必要に応じて関数を使用したパラメータを構造構築パラメータに渡すことでコンストラクタのタスクを完了することができます。