ホームページ > バックエンド開発 > Golang > 構造体内の関数パラメータとしてコンポジットの使用を許可する

構造体内の関数パラメータとしてコンポジットの使用を許可する

WBOY
リリース: 2024-02-05 22:30:03
転載
1160 人が閲覧しました

構造体内の関数パラメータとしてコンポジットの使用を許可する

質問内容

ゲームエンジンのようなものを作っているとします。

いくつかのイベント ハンドラーを定義するには GameObject 構造が必要です:

リーリー

次に、特定のゲーム オブジェクトを初期化するときに、ハンドラーをカスタム関数として定義したいと思います。

リーリー

tailMotionSpeedboid は GameObject のメンバーではないことに注意してください。これらは struct FishGameObject のメンバーであり、いくつかのカスタム プロパティと匿名の GameObject を持ちます:

リーリー

パラメーターを GameObjectGetter として指定すると、エラー self.tailMotionSpeed unknown (type GameObjectGetter has no field or method tailMotionSpeed) が発生し、エラー cannot use handler が発生します(type func (variable of self FishGameObject) )) 構造体リテラル の func(self GameObjectGetter) の値として (パラメーターを FishGameObject として指定した場合)。私は何をしますか?


正解


あなたがやりたいことは、あなたがやりたいようにGoで実現することはできません。ただし、次のようにすることもできます:

GameObject をインターフェイスとして定義します:

リーリー

BaseGameObject:

を定義できます リーリー

BaseGameObjectGameObject になるようにすべてのメソッドを定義します。

次に、先ほどと同じように FishGameObject を定義しますが、

リーリー

すべてのメソッドでポインタ レシーバも使用する必要があります。

以上が構造体内の関数パラメータとしてコンポジットの使用を許可するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート