12
10.2.md
12
10.2.md
@@ -116,12 +116,12 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为
|
||||
|
||||
而对于里面的index.tpl里面的资源设置如下:
|
||||
|
||||
// js文件
|
||||
<script type="text/javascript" src="views/{{.VV.Lang}}/js/jquery/jquery-1.8.0.min.js"></script>
|
||||
// css文件
|
||||
<link href="views/{{.VV.Lang}}/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||
// 图片文件
|
||||
<img src="views/{{.VV.Lang}}/images/btn.png">
|
||||
// js文件
|
||||
<script type="text/javascript" src="views/{{.VV.Lang}}/js/jquery/jquery-1.8.0.min.js"></script>
|
||||
// css文件
|
||||
<link href="views/{{.VV.Lang}}/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||
// 图片文件
|
||||
<img src="views/{{.VV.Lang}}/images/btn.png">
|
||||
|
||||
采用这种方式来本地化视图以及资源时,我们就可以很容易的进行扩展了。
|
||||
|
||||
|
||||
36
3.4.md
36
3.4.md
@@ -109,47 +109,47 @@ handler是一个接口,但是前一小节中的`sayhelloName`函数并没有
|
||||
|
||||
- 首先调用Http.HandleFunc
|
||||
|
||||
按顺序做了几件事:
|
||||
按顺序做了几件事:
|
||||
|
||||
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)
|
||||
|
||||
按顺序做了几件事情:
|
||||
按顺序做了几件事情:
|
||||
|
||||
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)
|
||||
|
||||
11 选择handler:
|
||||
|
||||
A. 判断是否有路由能满足这个request(循环遍历ServerMux的muxEntry)
|
||||
A 判断是否有路由能满足这个request(循环遍历ServerMux的muxEntry)
|
||||
|
||||
B. 如果有路由满足,调用这个路由handler的ServeHttp
|
||||
B 如果有路由满足,调用这个路由handler的ServeHttp
|
||||
|
||||
C. 如果没有路由满足,调用NotFoundHandler的ServeHttp
|
||||
C 如果没有路由满足,调用NotFoundHandler的ServeHttp
|
||||
|
||||
## links
|
||||
* [目录](<preface.md>)
|
||||
|
||||
12
7.1.md
12
7.1.md
@@ -204,13 +204,13 @@ Go语言的反射机制,可以利用这些tag信息来将来自XML文件中的
|
||||
- tag中含有`"omitempty"`,如果该字段的值为空值那么该字段就不会被输出到XML,空值包括:false、0、nil指针或nil接口,任何长度为0的array, slice, map或者string
|
||||
- tag中含有`"a>b>c"`,那么就会循环输出三个元素a包含b,b包含c,例如如下代码就会输出
|
||||
|
||||
FirstName string `xml:"name>first"`
|
||||
LastName string `xml:"name>last"`
|
||||
FirstName string `xml:"name>first"`
|
||||
LastName string `xml:"name>last"`
|
||||
|
||||
<name>
|
||||
<first>Asta</first>
|
||||
<last>Xie</last>
|
||||
</name>
|
||||
<name>
|
||||
<first>Asta</first>
|
||||
<last>Xie</last>
|
||||
</name>
|
||||
|
||||
|
||||
上面我们介绍了如何使用Go语言的xml包来编/解码XML文件,重要的一点是对XML的所有操作都是通过struct tag来实现的,所以学会对struct tag的运用变得非常重要,在文章中我们简要的列举了如何定义tag。更多内容或tag定义请参看相应的官方资料。
|
||||
|
||||
Reference in New Issue
Block a user