首頁 > 後端開發 > Golang > Go 中匿名結構體可以有方法嗎?

Go 中匿名結構體可以有方法嗎?

王林
發布: 2024-02-08 20:54:03
轉載
864 人瀏覽過

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
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板