Go 语言里面提供了一个完善的 net/http 包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。同时使用这个包能很便利地对 Web 的路由,静态文件,模版,cookie 等数据进行操作。
package main
import (
"fmt"
"log"
"net/http"
"strings"
)
func home(w http.ResponseWriter, r *http.Request) {
r.ParseForm() // 解析参数,默认是不会解析的
fmt.Println(r.Form) // 这些信息是输出到服务器端的打印信息
fmt.Println("path : ", r.URL.Path)
fmt.Println("scheme : ", r.URL.Scheme)
fmt.Println(r.Form["url_long"])
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "网站首页") //这个写入到w的是输出到客户端的
}
func main() {
http.HandleFunc("/", home) // 设置访问的路由 如首页
err := http.ListenAndServe(":800", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
就是这么方便, 一个 web server 创建好了, 通过访问 : http://localhost:800/ 即可体验 ~
Request 用户请求的信息,用来解析用户的请求信息,包括post、get、cookie、url等信息
Response 服务器需要反馈给客户端的信息
Conn 用户的每次请求链接
Handler 处理请求和生成返回信息的处理逻辑
1 创建Listen Socket, 监听指定的端口, 等待客户端请求到来。
2 监听并接收客户端的请求, 接下来通过Client Socket与客户端通信。
3 处理客户端的请求, 首先从Client Socket读取HTTP请求的协议头, 如果是POST方法, 还可能要读取客户端提交的数据, 然后交给相应的handler处理请求, handler处理完毕准备好客户端需要的数据, 通过Client Socket写给客户端。
1. 通过 http.ListenAndServe(":800", nil) 监听请求
2. 通过 http.HandleFunc("/", home) 处理请求
3. 通过 http.ResponseWriter() 输出响应结果