Fungsi Melaksanakan Antara Muka dalam Go
Dalam Go, antara muka mentakrifkan satu set kaedah yang mesti dilaksanakan oleh sesuatu jenis untuk dianggap sebagai ahlinya antara muka. Ini membenarkan tingkah laku polimorfik, kerana jenis yang melaksanakan antara muka yang sama boleh digunakan secara bergantian dalam kod.
Contoh 1: Antara Muka Pelaksana Jenis Tersuai
Pertimbangkan antara muka berikut untuk Pengendali HTTP:
type Handler interface { ServeHTTP(*Conn, *Request) }
Jenis berikut, Counter, melaksanakan antara muka ini dengan menyediakan pelaksanaan tersuai ServeHTTP:
type Counter int func (ctr *Counter) ServeHTTP(c *Conn, req *Request) { fmt.Fprintf(c, "counter = %d\n", ctr) ctr++ }
Contoh 2: Menukar Fungsi kepada Pengendali
Fungsi berikut, notFound, tidak melaksanakan antara muka Pengendali secara langsung:
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") }
Untuk menjadikan fungsi ini serasi dengan antara muka Pengendali, Go menyediakan cara untuk menukar fungsi kepada taip dengan kaedah tertentu. Dalam kes ini, jenis HandlerFunc ditakrifkan:
type HandlerFunc func(*Conn, *Request)
Kaedah, ServeHTTP, ditambahkan pada jenis ini:
func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) }
Fungsi notFound kini boleh ditukar kepada contoh HandlerFunc dan ditugaskan kepada pembolehubah:
var Handle404 = HandlerFunc(notFound)
Ini membolehkan Handle404 digunakan sebagai Pengendali, walaupun fungsi notFound itu sendiri tidak melaksanakan antara muka Pengendali secara langsung.
Penjelasan
Ringkasnya, Go membenarkan fungsi ditukar kepada jenis dengan kaedah tertentu, menangani situasi di mana fungsi tidak memenuhi keperluan antara muka secara langsung. Dengan mencipta contoh jenis daripada fungsi dan mentakrifkan kaedah pada jenis itu, fungsi itu boleh ditampung oleh antara muka, membolehkan gelagat polimorfik dalam atur cara.
Atas ialah kandungan terperinci Bagaimanakah fungsi boleh digunakan untuk melaksanakan antara muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!