首頁 >後端開發 >Golang >如何為介面進行方法鏈?

如何為介面進行方法鏈?

PHPz
PHPz轉載
2024-02-13 08:39:08935瀏覽

如何為介面進行方法鏈?

php小編小新為您帶來一篇關於如何為介面進行方法鏈的介紹。方法鍊是一種優雅的程式設計方式,可以在一個語句中連續呼叫多個方法,提高程式碼的簡潔性和可讀性。在本文中,我們將詳細介紹如何為介面實作方法鏈的技巧和注意事項,幫助您更好地應用方法鏈編程,提升程式碼的效率和可維護性。讓我們一起來探索吧!

問題內容

我想做一些類似 obj.withx().withy().withz() 的事情。 obj 可以有不同的類型,這就是我使用介面的原因。

不幸的是 obj 也可以是 nil。在這種情況下,我的方法連結將會出現恐慌,因為我在 nil 介面上呼叫一個方法,而 go 不知道要呼叫哪個方法。

這裡是最小的可重現範例

如何仍然對可能是 nil 的物件使用方法連結?

  • 有沒有辦法可以為 withx() 和其他函數提供預設實作?
  • 我還考慮了一種模式,其中每個屬性函數都傳回一個函數,但這似乎太複雜
obj.WithX().WithY()    // of type func() myInterface
obj.WithX().WithY()()  // now I got the actual object.

解決方法

這些註解大部分是正確的,但實際上你不能回傳一個無型別 nil。

func new(someParam bool) inter {
    // more complicated. May return A, B or nil
    if someParam {
        return &A{}
    }
    var b *B
    return b // which is nil, but of a type that implements the interface
}

https://www.php.cn/link/845c31a2fbc3d2e14ecb17d48dcc65a4

所以基本上你只需要一個「預設」類型,它可以是 nil,它仍然實作該介面。

以上是如何為介面進行方法鏈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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