ホームページ  >  記事  >  バックエンド開発  >  Go 言語にはコンストラクターがありますか?

Go 言語にはコンストラクターがありますか?

青灯夜游
青灯夜游オリジナル
2023-01-10 14:15:421343ブラウズ

Go 言語にはコンストラクターがありません。構造化言語としての Go 言語には、オブジェクト指向言語のコンストラクターがありませんが、オブジェクト指向言語のコンストラクターと同様の効果は、構造の初期化プロセスを使用して、オブジェクト指向言語をシミュレートする方法で実現できます。コンストラクターの実装。

Go 言語にはコンストラクターがありますか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

コンストラクターは特別なメソッドで、主にオブジェクトの作成時にオブジェクトを初期化するために使用されます。つまり、オブジェクトのメンバー変数に初期値を代入します。特殊クラスは複数のコンストラクターを持つことができ、パラメーターの数またはパラメーターのタイプ、つまりコンストラクターのオーバーロードに従って区別できます。

構造化言語として、Golang にはオブジェクト指向言語のコンストラクター メソッドがありませんが、Golang はオブジェクト指向プログラミングのアイデアや継承などのメソッド、C のようなコンストラクターを実装できます。

struct は値型であるため、構造がより複雑な場合、value copy のパフォーマンスのオーバーヘッドが比較的大きくなるため、コンストラクターは を返します。構造体ボディポインタ 型。

#仕様

  • 新しいキーワードで開始

  • 構造体ポインタを返す

構造体を作成および初期化する複数の方法 - コンストラクターのオーバーロードをシミュレートする

構造体を使用して猫の特性を記述する場合、次のことが可能です。色と名前に従ってさまざまな種類の猫にすることができます。その後、さまざまな色と名前が構造体のフィールドになります。同時に、色と名前を使用してさまざまな種類の猫のインスタンスを構築できます。このプロセスでは、次のことができます。次のコードを参照してください。

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 言語には関数のオーバーロードがないため、関数名の競合を避けるために、 NewCatByName() と NewCatByColor() を使用します。 2 つの異なる関数名は、異なる Cat 構築プロセスを表します。

親子関係を持つ構造体の構築と初期化 - 親構築呼び出しのシミュレーション

黒猫は猫の一種です。 「黒猫は黒猫の総称です。この二つの概念を同時に説明するときに黒猫が派生します。黒猫は猫の種類に由来します。猫と黒猫の関係を構造で説明する場合、猫の構造は猫の種類に由来します。」は black cat に埋め込まれています。cat (BlackCat) では、black cat が cat の特性を持っていることを意味し、2 つの異なるコンストラクターを使用して black cat と cat の 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
}

コードの説明 次のように:

  • Line 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 の The Cat もインスタンス化されます。

つまり、Go 言語にはコンストラクターに関する特別な機構は用意されておらず、ユーザーは必要に応じて構造構築パラメーターにパラメーターを渡すことでコンストラクターのタスクを完了できます。

【関連する推奨事項:

Go ビデオ チュートリアル プログラミング教育

以上がGo 言語にはコンストラクターがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。