Tôi muốn biết điều gì đang xảy ra ở đây.Chức năng thực hiện giao diện
Có giao diện cho một handler http:
type Handler interface {
ServeHTTP(*Conn, *Request)
}
này thực hiện Tôi nghĩ rằng tôi hiểu.
type Counter int
func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) {
fmt.Fprintf(c, "counter = %d\n", ctr);
ctr++;
}
Từ hiểu biết của tôi, loại "Counter" thực hiện giao diện vì nó có phương thức có chữ ký bắt buộc. Càng xa càng tốt. Sau đó, ví dụ này được đưa ra:
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");
}
// 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);
Ai đó có thể giải thích tại sao hoặc cách các chức năng khác nhau này khớp với nhau?
Ok Tôi nghĩ rằng tôi nhận được nó ngay bây giờ, điều mà vấp tôi lên là chuyển đổi notFound để HandlerFunc. Sau khi đọc lại phần chuyển đổi có hiệu quả, nó rõ ràng hơn cách mà cũng có thể áp dụng cho các hàm. http://golang.org/doc/effective_go.html#conversions – mbarkhau