簡介
程式設計中的介面定義了類型必須具有的一組方法實作被視為有效的介面實作。當函數實作介面時,其方法簽章必須與介面的方法簽章相符。
介面與實作
在這種情況下,我們有以下介面:
type Handler interface { ServeHTTP(*Conn, *Request) }
該介面定義了一個名為ServeHTTP 的方法,此方法以Conn 和Request 作為參數。
Counter 類型的以下實作滿足Handler 介面:
type Counter int func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) { fmt.Fprintf(c, "counter = %d\n", ctr); ctr++; }
轉換函數來實作介面
有時,我們可能有一個與介面方法簽章匹配的函數,但沒有直接實作為方法。在這種情況下,可以使用以下技術將函數轉換為介面實作:
// Now we define a type to implement ServeHTTP: type HandlerFunc func(*Conn, *Request) func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) // the receiver's a func; call it } // Convert function to attach method, implement the interface: var Handle404 = HandlerFunc(notFound);
在此範例中,notFound 函數不是方法,但它與 ServeHTTP 方法的簽章相符。為了使其與 Handler 介面相容,我們建立了一個 HandlerFunc 類型,將函數包裝在方法中。然後,我們建立一個 HandlerFunc 實例,並將 notFound 作為其值。此實例 Handle404 現在實作了 Handler 接口,並且可以用作有效的實作。
摘要
此技術演示了滿足介面方法簽名的函數如何被轉換為介面實現,即使它們不是自訂類型的方法。當使用需要採用基於介面的系統的現有功能時,這種方法特別有用。
以上是如何將函數轉換為介面實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!