クラスとオブジェクトとは何ですか?
かどうかを答える前に 行く もっている クラス と オブジェクト 、まずプログラミングのコンテキストでそれらが何であるかを定義する必要があります。あ クラス コレクションの特性とアクションの概要を示すモデルまたはテンプレートです。 オブジェクト .アン 物体 のインスタンスとして作成されます クラス メモリが割り当てられ、その状態が実行時に初期化されるとき。 クラス と オブジェクト ポリモーフィズム、継承、カプセル化をサポートする、Java、C++、C# などの従来のオブジェクト指向プログラミング言語の重要な構成要素です。
Golang の構造体
の 行く、クラス と呼ばれるユーザー定義のデータ型に置き換えられます。 構造体。 これらは 構造体 複数の要素またはプロパティを組み合わせて、メソッドを含めることを可能にします – メソッドのインスタンスで動作する関数 構造体。 その間 構造体 ~といくつかの類似点を共有する クラス 継承やインターフェースなど、顕著な違いもあります。例えば、 行く クラスベースの言語で通常見られるように、作成時にオブジェクトの状態を初期化する独自のメソッドであるコンストラクターはありません。
Golang のインターフェース
行く のような概念を持っています オブジェクト : インターフェイス .アン インターフェース 動作または機能を記述するメソッドのコレクションですが、実装方法は指定されていません。 インターフェース でポリモーフィズムを達成する方法を提供する 行く インターフェースの要件を満たしていれば、異なるタイプを交換可能に使用できます。これは可能にする強力な概念です。 行く パフォーマンスやシンプルさを犠牲にすることなく、高度な柔軟性と拡張性を実現します。
Golang での構造体とインターフェイスの使用
次の例は、 構造体 と インターフェイス の 行く .
パッケージメイン
輸入 'fmt'
タイプ 人間 構造体 {
名前文字列
}
タイプ ワーカー 構造体 {
人間
ジョブ文字列
}
機能 ( ヒト ) 情報 ( ) {
fmt。 Printf ( 「私は%sです \n ' 、 h. 名前 )
}
機能 ( wワーカー ) 情報 ( ) {
fmt。 Printf ( 「私は %s です。私は %s です。 \n ' 、 の。 名前 、 の。 仕事 )
}
タイプ Person インターフェイス {
情報 ( )
}
機能メイン ( ) {
ジョン := ワーカー { 人間 { 「ジョン」 } 、 'ワーカー' }
ドウ := 人間 { 「ドウ」 }
ジョン。 情報 ( )
ドウ。 情報 ( )
人でした
私 = ジョン
私。 情報 ( )
私 = ドウ
私。 情報 ( )
}
2つ作成しました 構造体 、 人間 と ワーカー 、上記のコードで。次に、メッセージを出力する関数が作成されます。の 構造体 で呼び出されます 主要 () の関数 人 インターフェース .我々はそれを見ることができます 情報 メソッドは両方によって実装されています ワーカー そしてその 人間 、したがって、型を持つ変数 i 人 インターフェイスは正しく機能し、出力を印刷します。
出力
行く ~に対してユニークなアプローチをしている カプセル化 . カプセル化 従来のオブジェクト指向プログラミングでは、フィールドを非公開にし、getter メソッドと setter メソッドを介してアクセスできるようにすることで実現されます。の 行く 、 カプセル化 これは、同じパッケージ内でのみ表示される小文字のフィールド名を使用することで実現されます。この戦略はより単純で明確であるため、コードの動作を理解しやすくなり、予期しない副作用の可能性が低くなります。
行く の簡略化された形式を提供します ポリモーフィズム .オブジェクト指向プログラミングには、 ポリモーフィズム これにより、さまざまなクラスのオブジェクトを同じクラスのインスタンスとして扱うことができます。 行く は、従来のクラスベースの継承を提供しませんが、構造体が実装する必要がある一連のメソッドを指定するために使用できるインターフェイスをサポートします。 行く また、プログラマがインターフェイス変数の内容を調べて、基礎となる具体的な値を取得できるようにする型アサーションも提供します。
結論
行く 持っていません クラス また オブジェクト 古典的な意味で。代わりに、 構造体 と インターフェイス 、より簡単で軽量な方法で同等の機能を提供します。 行く は、異なる哲学と文法を採用することで、シンプルさ、読みやすさ、およびパフォーマンスを優先する開発者の間で人気を博しています。知り合ったものの、 ゴーズ その独特の機能と設計により、より効果的で保守しやすいコードが得られます。