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

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

王林
王林転載
2024-02-08 20:54:03799ブラウズ

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 までご連絡ください。