fixed again and again= =||
This commit is contained in:
34
3.4.md
34
3.4.md
@@ -111,45 +111,45 @@ handler是一个接口,但是前一小节中的`sayhelloName`函数并没有
|
|||||||
|
|
||||||
按顺序做了几件事:
|
按顺序做了几件事:
|
||||||
|
|
||||||
1. 调用了DefaultServerMux的HandleFunc
|
1. 调用了DefaultServerMux的HandleFunc
|
||||||
|
|
||||||
2. 调用了DefaultServerMux的Handle
|
2. 调用了DefaultServerMux的Handle
|
||||||
|
|
||||||
3. 往DefaultServeMux的map[string]muxEntry中增加对应的handler和路由规则
|
3. 往DefaultServeMux的map[string]muxEntry中增加对应的handler和路由规则
|
||||||
|
|
||||||
- 其次调用http.ListenAndServe(":9090", nil)
|
- 其次调用http.ListenAndServe(":9090", nil)
|
||||||
|
|
||||||
按顺序做了几件事情:
|
按顺序做了几件事情:
|
||||||
|
|
||||||
1. 实例化Server
|
1. 实例化Server
|
||||||
|
|
||||||
2. 调用Server的ListenAndServe()
|
2. 调用Server的ListenAndServe()
|
||||||
|
|
||||||
3. 调用net.Listen("tcp", addr)监听端口
|
3. 调用net.Listen("tcp", addr)监听端口
|
||||||
|
|
||||||
4. 启动一个for循环,在循环体中Accept请求
|
4. 启动一个for循环,在循环体中Accept请求
|
||||||
|
|
||||||
5. 对每个请求实例化一个Conn,并且开启一个goroutine为这个请求进行服务go c.serve()
|
5. 对每个请求实例化一个Conn,并且开启一个goroutine为这个请求进行服务go c.serve()
|
||||||
|
|
||||||
6. 读取每个请求的内容w, err := c.readRequest()
|
6. 读取每个请求的内容w, err := c.readRequest()
|
||||||
|
|
||||||
7. 判断handler是否为空,如果没有设置handler(这个例子就没有设置handler),handler就设置为DefaultServeMux
|
7. 判断handler是否为空,如果没有设置handler(这个例子就没有设置handler),handler就设置为DefaultServeMux
|
||||||
|
|
||||||
8. 调用handler的ServeHttp
|
8. 调用handler的ServeHttp
|
||||||
|
|
||||||
9. 在这个例子中,下面就进入到DefaultServerMux.ServeHttp
|
9. 在这个例子中,下面就进入到DefaultServerMux.ServeHttp
|
||||||
|
|
||||||
10. 根据request选择handler,并且进入到这个handler的ServeHTTP
|
10. 根据request选择handler,并且进入到这个handler的ServeHTTP
|
||||||
|
|
||||||
mux.handler(r).ServeHTTP(w, r)
|
mux.handler(r).ServeHTTP(w, r)
|
||||||
|
|
||||||
11 选择handler:
|
11 选择handler:
|
||||||
|
|
||||||
A. 判断是否有路由能满足这个request(循环遍历ServerMux的muxEntry)
|
A. 判断是否有路由能满足这个request(循环遍历ServerMux的muxEntry)
|
||||||
|
|
||||||
B. 如果有路由满足,调用这个路由handler的ServeHttp
|
B. 如果有路由满足,调用这个路由handler的ServeHttp
|
||||||
|
|
||||||
C. 如果没有路由满足,调用NotFoundHandler的ServeHttp
|
C. 如果没有路由满足,调用NotFoundHandler的ServeHttp
|
||||||
|
|
||||||
## links
|
## links
|
||||||
* [目录](<preface.md>)
|
* [目录](<preface.md>)
|
||||||
|
|||||||
2
5.1.md
2
5.1.md
@@ -1,4 +1,4 @@
|
|||||||
h# 5.1 database/sql接口
|
# 5.1 database/sql接口
|
||||||
Go和PHP不同的地方是,他没有官方提供数据库驱动,而是为开发数据库驱动定义了一些标准接口,第三方用户可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,我们按照标准接口开发的代码, 在需要迁移数据库时,不需要任何修改。那么Go都定义了那些标准接口呢?让我们来详细的分析一下
|
Go和PHP不同的地方是,他没有官方提供数据库驱动,而是为开发数据库驱动定义了一些标准接口,第三方用户可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,我们按照标准接口开发的代码, 在需要迁移数据库时,不需要任何修改。那么Go都定义了那些标准接口呢?让我们来详细的分析一下
|
||||||
|
|
||||||
## sql.Register
|
## sql.Register
|
||||||
|
|||||||
Reference in New Issue
Block a user