首頁  >  文章  >  後端開發  >  Golang 函數中可以存在巢狀類別嗎?

Golang 函數中可以存在巢狀類別嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-04 14:56:02480瀏覽

Can Nested Classes Exist Within Functions in Golang?

Golang 函數中可以巢狀類別嗎?

Golang 允許在函數中巢狀結構體,但不允許在其他函數中巢狀函數(不包括拉姆達函數)。這個限制引發了一個問題:是否可以在 Golang 中的函數內定義巢狀類別。

考慮以下範例:

<code class="go">func f() {
    // Nested struct Cls within f
    type Cls struct {
        // ...
    }

    // Attempt to bind foo to Cls fails
    func (c *Cls) foo() {
        // ...
    }
}</code>

在這種情況下,嘗試將 foo 函數綁定到巢狀類 Cls 將會失敗。這可能看起來令人驚訝,因為函數內部的類別並沒有減少。

函數文字來救援

儘管Golang 中不允許在其他函數中巢狀函數,但是使用函數文字的解決方法:

<code class="go">func f() {
    foo := func(s string) {
        fmt.Println(s)
    }

    foo("Hello World!")
}</code>

這裡,我們建立一個function 類型的變數foo,它在另一個函數f 中宣告。呼叫「外部」函數 f 輸出:「Hello World!」正如預期的那樣。

這個解決方案允許我們實現與函數內的嵌套類別類似的行為,儘管使用不同的機制。

以上是Golang 函數中可以存在巢狀類別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn