不废话,上代码,代码里有注释,看注释就行了。
package main
import (
"net/http"
)
// 自定义 aboutHandler
type aboutHandler struct{}
func (h *aboutHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("关于我们"))
}
// 自定义 cateHandler
type cateHandler struct{}
// ServeHTTP是cateHandler类型的方法(也是一种函数)
func (h *cateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("分类页面"))
}
func list(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("列表页面"))
}
func tags(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("TAGS页面"))
}
func main() {
//DefaultServerMax,默认路由,意思是在根地址下监听,如果有其它路径响应,一律按根地地请求处理
//http.Handle函数有两个参数,第二个是个Handler
//第一个是监听的网络地址,如果为空字符串"",则表是80端口
//第二个是handle,如果值为 nil ,则表示是 DefaultServerMax ,即 multiplexer(多路复用器) 可以看作是路由器
//http.ListenAndServe("localhost:8888", nil)
//以下是 http.ListenAndServe("localhost:8888", nil) 更常用更灵活的写法
server := http.Server{
//网络地址
Addr: "localhost:8888",
//值为 nil ,是 DefaultServerMax 即最前面的 Handler
Handler: nil,
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("这是GO服务器的首页!"))
})
//使用 http.Handle 函数处理不同的 handle ,实现转发到处种路径/页面
a := aboutHandler{}
http.Handle("/about", &a)
c := cateHandler{}
http.Handle("/cate", &c)
//使用 http.HandleFunc 函数,注:在go源码内部还是调用http.Handle函数
http.HandleFunc("/list", list) //注意:list 不要写成list(),加小括号就执行函数了。这里是传入函数
//使用http.HandlerFunc函数:http.HandlerFunc(tags)是把tags这个函数转换成一个Handler类型。
http.HandleFunc("/tags", http.HandlerFunc(tags))
//server.ListenAndServe要放所有handle后面
server.ListenAndServe()
}