golang http源码分析一

七七_2710 · · 996 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

func main() {

http.HandleFunc("/", Handler)

http.ListenAndServe("127.0.0.0:8000", nil)

}

func Handler(w http.ResponseWriter, r *http.Request) {

fmt.Fprintln(w, "hello world")

}

这是一个简单的http请求的demo

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

hander函数: 具有func(w http.ResponseWriter, r *http.Requests)签名的函数

handler处理器(函数): 经过HandlerFunc结构包装的handler函数,它实现了ServeHTTP接口方法的函数。调用handler处理器的ServeHTTP方法时,即调用handler函数本身。

handler对象:实现了Handler接口ServeHTTP方法的结构。

handler处理器和handler对象的差别在于,一个是函数,另外一个是结构,它们都有实现了ServeHTTP方法。很多情况下它们的功能类似,下文就使用统称为handler。这算是Golang通过接口实现的类动态类型吧。

type Handler interface {

    ServeHTTP(ResponseWriter, *Request)

}


所有的handler搜实现了serveHTTP接口的方法

接下来分析一下:

func main() {

one(2, callback)

}

 //需要传递函数

func callback(i int) {

fmt.Println("i am callBack")

fmt.Println(i)

}

//main中调用的函数

func one(i int, f func(int)) {

two(i, fun(f))

}

//one()中调用的函数

func two(i int, c Call) {

c.call(i)

}

//定义的type函数

type fun func(int)

//fun实现的Call接口的call()函数

func (f fun)call(i int) {

f(i)

}

//接口

type Call interface {

call(int)

}

最后callback实现了call(int)方法

同理:在http中所有的handler搜实现了serveHTTP接口的方法


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:七七_2710

查看原文:golang http源码分析一

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

996 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传