上一节学习了怎么创建web server、handler是什么,我们也了解了DefaultServeMux是一个Multiplexer,也称多路复用器,同时也是handler,可以把DefaultServeMux看做是一个总入口handler,那么怎么使用多个handler呢?
使用多个handler有2个方法,
(1)设置http.Server结构体的Handler字段为nil
(2)手动设置http.Handler,并将该Handler添加到DefaultServeMux中
http.Handler的参数:
通过源码可以看到,handler函数有2个参数,第一个参数是pattern,类型是字符串,表示URL路径,比如“/、/index、/home等”。第二个参数是Handler,Handler的类型是接口类型。
下面进行一个示例,将之前的示例进行下修改就可以完成演示
红色箭头是需要关注的地方
执行结果
6行:自定义了一个结构体,名字为IndexHandler
7行:重写了ServeHTTP方法,接受者是IndexHandler
再增加一个/home路径,怎么办?
执行结果
这样就增加了2个handler,分别完成了不同的任务
这样好像还有点麻烦,有没有别的方法呢?
这就用到了另外一个函数http.HandleFunc
再修改下上面的代码,通过函数http.HandleFunc实现“/admin”功能。
执行结果
可以看出功能上是一样的。
代码解析
18行:Student 函数,作用是输出”这里是 :/student”
43行:使用http.HandleFunc的第一种方法,采用了匿名函数。
48行:使用http.HandleFunc的第二种方法,采用了函数参数
可以看出,这两种方法实现起来更简单。