• Golang的interface一个例子


    我们用Golang做网站时,必然会有这样的代码:

    http.Handle("/", http.FileServer(http.Dir(".")))

    注意这里的 http.Handle( 函数的第二个参数,Golang的源码中这个函数的描述如下:

    // Handle registers the handler for the given pattern

    // in the DefaultServeMux.

    // The documentation for ServeMux explains how patterns are matched.

    func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) }

     

    其中第二个参数是一个 interface,必须实现ServeHTTP(ResponseWriter, *Request)方法

    // Objects implementing the Handler interface can be

    // registered to serve a particular path or subtree

    // in the HTTP server.

    //

    // ServeHTTP should write reply headers and data to the ResponseWriter

    // and then return.  Returning signals that the request is finished

    // and that the HTTP server can move on to the next request on

    // the connection.

    type Handler interface {

        ServeHTTP(ResponseWriter, *Request)

    }

     

    如果我们用WebSocket时,又会发现, 我们给http.Handle( 传递的是 websocket.Handler(。

    http.Handle("/socket", websocket.Handler(Echo))

     

    websocket.Handler 又是另外一个接口,如下

    // Handler is an interface to a WebSocket.

    type Handler func(*Conn)

     

    这里为啥会出现接口更换了? 其实 再往下看可以看到 websocket.Handler 接口多一个公共的方法:ServeHTTP, 即接口 websocket.Handler 实现了 http 的 Handler 接口。

     

    // ServeHTTP implements the http.Handler interface for a Web Socket

    func (h Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {

     

     

    这里的interface有了其他语言类的一些特征,比较有趣。


    // Handler is an interface to a WebSocket.type Handler func(*Conn)
    // ServeHTTP implements the http.Handler interface for a Web Socketfunc (h Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {

  • 相关阅读:
    MFC中小笔记(四)
    MFC中小笔记(三)
    MFC中小笔记
    关于小蜘蛛诞生的坎坎坷坷
    Win32Api程序设计 常用域改变(设定)窗口位置、大小的api
    Win32Api程序设计 注册窗口类
    TCP segment of a reassembled PDU【转】
    计算机网络复习 -- 概念梳理
    指针(pointer) -- (上)
    原来我连真正的调试都不会,每次都是靠编译器(⊙﹏⊙)b
  • 原文地址:https://www.cnblogs.com/ghj1976/p/3037914.html
Copyright © 2020-2023  润新知