首頁  >  文章  >  後端開發  >  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」。有沒有一種方法可以讓函數存取「Value」而無需再次將其作為參數傳遞,類似於「anonymousStruct.Test(anonymousStruct.Value)」?換句話說,Go 中匿名結構體可以有方法而不是函數嗎?謝謝您的指導。


正確答案


您不能將方法宣告為匿名結構,因為方法宣告只能包含命名類型(作為接收者)。

除此之外,如果匿名結構嵌入具有方法的類型(它們會被提升),則它們可以具有方法。

在您的範例中,您無法在 複合文字 中引用 anonymousStruct 變量,因為變數僅在聲明之後(在複合文字之後)才在範圍內。請參閱規格:宣告與範圍;範例: 在函數中定義遞迴函數走吧

例如,您可以在變數宣告之後初始化函數欄位:

var anonymousStruct = &struct {
    Value int
    Test  func()
}{Value: 3}

anonymousStruct.Test = func() {
    fmt.Println(anonymousStruct.Value)
}

anonymousStruct.Test()

這將輸出(在 Go Playground 上嘗試):

3

以上是Go 中匿名結構體可以有方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除