mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 05:33:04 +08:00
@@ -16,9 +16,9 @@ Http是一个比tcp更高级的协议,它描述了客户端浏览器如何与
|
|||||||
|
|
||||||
表单属性实际上是一个`map[string][]string`类型。网页服务器返回了一个`http.Response`,它是通过`http.ResponseWriter`对象输出的,这个对象整合了HTTP服务器的返回结果;通过对它写入内容,我们就将数据发送给了HTTP客户端。
|
表单属性实际上是一个`map[string][]string`类型。网页服务器返回了一个`http.Response`,它是通过`http.ResponseWriter`对象输出的,这个对象整合了HTTP服务器的返回结果;通过对它写入内容,我们就将数据发送给了HTTP客户端。
|
||||||
|
|
||||||
现在我们还需要编写网页服务器必须执行的程序,它是如何处理请求的呢。这是在`http.HandleFunc`函数中完成的,就是在这个例子中当根路径“/”(url地址是http://localhost:8080 )被请求的时候(或者这个服务器上的其他地址),`HelloServer`函数就被执行了。这个函数是`http.HandlerFunc`类型的,它们通常用使用Prehandler来命名,在前边加了一个Pref前缀。
|
现在我们还需要编写网页服务器必须执行的程序,它是如何处理请求的呢。这是在`http.HandleFunc`函数中完成的,就是在这个例子中当根路径“/”(url地址是http://localhost:8080 )被请求的时候(或者这个服务器上的其他地址),`HelloServer`函数就被执行了。这个函数是`http.HandlerFunc`类型的,它们通常用使用Prefhandler来命名,在前边加了一个Pref前缀。
|
||||||
|
|
||||||
`http.HandleFunc`注册了一个处理函数(这里是`HelloServer`)来处理对应`/`的请求。
|
`http.HandleFunc`注册了一个处理函数(这里是`HelloServer`)来处理对应`/`的请求。
|
||||||
|
|
||||||
`/`可以被替换为其他特定的url比如`/create`,`/edit`等等;你可以为每一个特定的url定义一个单独的处理函数。这个函数需要两个参数:第一个是`ReponseWriter`类型的`w`;第二个是请求`req`。程序向`w`写入了`Hello`和`r.URL.Path[1:]`组成的字符串后边的`[1:]`表示“创建一个从第一个字符到结尾的子切片”,用来丢弃掉路径开头的“/”,`fmt.Fprintf()`函数完成了本次写入(请看[章节12.8](12.8.md));另外一种写法是`io.WriteString(w, "hello, world!\n")`
|
`/`可以被替换为其他特定的url比如`/create`,`/edit`等等;你可以为每一个特定的url定义一个单独的处理函数。这个函数需要两个参数:第一个是`ReponseWriter`类型的`w`;第二个是请求`req`。程序向`w`写入了`Hello`和`r.URL.Path[1:]`组成的字符串后边的`[1:]`表示“创建一个从第一个字符到结尾的子切片”,用来丢弃掉路径开头的“/”,`fmt.Fprintf()`函数完成了本次写入(请看[章节12.8](12.8.md));另外一种写法是`io.WriteString(w, "hello, world!\n")`
|
||||||
|
|
||||||
@@ -62,6 +62,7 @@ Starting Process E:/Go/GoBoek/code_examples/chapter_14/hello_world_webserver.exe
|
|||||||
```go
|
```go
|
||||||
http.ListenAndServe(":8080", http.HandlerFunc(HelloServer))
|
http.ListenAndServe(":8080", http.HandlerFunc(HelloServer))
|
||||||
```
|
```
|
||||||
|
|
||||||
2)`fmt.Fprint`和`fmt.Fprintf`都是用来写入`http.ResponseWriter`的不错的函数(他们实现了`io.Writer`)。
|
2)`fmt.Fprint`和`fmt.Fprintf`都是用来写入`http.ResponseWriter`的不错的函数(他们实现了`io.Writer`)。
|
||||||
比如我们可以使用
|
比如我们可以使用
|
||||||
```go
|
```go
|
||||||
@@ -70,7 +71,9 @@ fmt.Fprintf(w, "<h1>%s<h1><div>%s</div>", title, body)
|
|||||||
来构建一个非常简单的网页并插入`title`和`body`的值
|
来构建一个非常简单的网页并插入`title`和`body`的值
|
||||||
|
|
||||||
如果你需要更多复杂的替换,使用模板包(请看[章节15.7](15.7.md))
|
如果你需要更多复杂的替换,使用模板包(请看[章节15.7](15.7.md))
|
||||||
|
|
||||||
3)如果你需要使用安全的https连接,使用`http.ListenAndServeTLS()`代替`http.ListenAndServe()`
|
3)如果你需要使用安全的https连接,使用`http.ListenAndServeTLS()`代替`http.ListenAndServe()`
|
||||||
|
|
||||||
4)`http.HandleFunc("/", Hfunc)`中的`HFunc`是一个处理函数,如下:
|
4)`http.HandleFunc("/", Hfunc)`中的`HFunc`是一个处理函数,如下:
|
||||||
```go
|
```go
|
||||||
func HFunc(w http.ResponseWriter, req *http.Request) {
|
func HFunc(w http.ResponseWriter, req *http.Request) {
|
||||||
|
Reference in New Issue
Block a user