ホームページ > バックエンド開発 > Golang > Go では匿名構造体にメソッドを含めることはできますか?

Go では匿名構造体にメソッドを含めることはできますか?

王林
リリース: 2024-02-08 20:54:03
転載
885 人が閲覧しました

Go 中匿名结构体可以有方法吗?

質問内容

var anonymousStruct = &struct {
    Value int
    Test  func()
}{
    Test: func() {
        fmt.Println(anonymousStruct.Value)
    },
}
ログイン後にコピー

コードを見ると、6 行目で問題が発生しました。関数 "Test" がパラメーター "Value" にアクセスできません。 「anonymousStruct.Test(anonymousStruct.Value)」と同様に、パラメータとして再度渡さずに「Value」へのアクセスを関数に与える方法はありますか?言い換えれば、Go の匿名構造体は関数の代わりにメソッドを持つことができるのでしょうか?ご指導ありがとうございます。


正解


メソッド宣言には(レシーバーとして)名前付き型のみを含めることができるため、メソッドを匿名構造体として宣言することはできません。

これに加えて、匿名構造体がメソッドを持つ型に埋め込まれている場合、匿名構造体はメソッドを持つことができます (それらは昇格されます)。

この例では、変数は宣言された後 (複合リテラルの後) にのみスコープ内に存在するため、複合リテラル 内で anonymousStruct 変数を参照することはできません。 仕様: 宣言とスコープを参照してください。例: 関数内での再帰関数の定義それでは、行きましょう

たとえば、変数宣言後に関数フィールドを初期化できます:

リーリー

これは出力されます (Go Playground で試してください):

リーリー

以上がGo では匿名構造体にメソッドを含めることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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