首頁 > 後端開發 > Golang > 主體

Go 中如何使用函數來實作介面?

Mary-Kate Olsen
發布: 2024-11-06 12:53:02
原創
379 人瀏覽過

How can functions be used to implement interfaces in Go?

Go 中實作介面的函數

在Go 中,介面定義了一組方法,而類型必須實作這些方法才能被視為此類型的成員介面。這允許多態行為,因為實現相同介面的類型可以在程式碼中互換使用。

範例1:自訂類型實作介面

考慮以下介面HTTP 處理程序:

type Handler interface {
    ServeHTTP(*Conn, *Request)
}
登入後複製

以下類型Counter,透過提供ServeHTTP 的自訂實作來實現此介面:

type Counter int

func (ctr *Counter) ServeHTTP(c *Conn, req *Request) {
    fmt.Fprintf(c, "counter = %d\n", ctr)
    ctr++
}
登入後複製

範例2:將函數轉換為處理程序

下面的函數notFound 並沒有直接實作Handler 介面:

func notFound(c *Conn, req *Request) {
    c.SetHeader("Content-Type", "text/plain;", "charset=utf-8")
    c.WriteHeader(StatusNotFound)
    c.WriteString("404 page not found\n")
}
登入後複製

為了讓這個函數相容於Handler 接口,Go 提供了一種將函數轉換為用特定的方法鍵入。在本例中,定義了HandlerFunc 類型:

type HandlerFunc func(*Conn, *Request)
登入後複製

將方法ServeHTTP 加到此類型:

func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) {
    f(c, req)
}
登入後複製

notFound 函數現在可以轉換為HandlerFunc 並賦值給變數:

notFound 函數現在可以轉換為HandlerFunc 並賦值給變數:
var Handle404 = HandlerFunc(notFound)
登入後複製

這允許Handle404 用作Handler,即使notFound 函數本身並不會直接實作Handler 介面。

說明

總之,Go 允許使用特定方法將函數轉換為類型,解決函數不能直接滿足介面要求的情況。透過在函數之外建立類型實例並在該類型上定義方法,介面可以容納該函數,從而在程式中實現多態行為。

以上是Go 中如何使用函數來實作介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!