使用GO语言搭建一个HTTP服务器
HTTP协议简介
http协议中文翻译为——“超文本传输协议”,它位于TCP/IP模型当中的应用层。HTTP通过一系列的键值对的形式来描述相关的请求和响应信息。请求消息是浏览器向服务器发送请求时的消息,响应消息则是请求消息发送之后服务器给予的反馈。如果感兴趣可自行查阅,就不过多赘述。
HTTP服务器搭建
在我们了解HTTP协议之后,就可以使用TCP协议来实现一个HTTP服务器。我们只需HTTP协议来解析请求消息和反回响应消息。GO语言官方也给予了相应的API,我们可以直接使用。
引包
go // 可自动引入 import "net/http"
HandleFunc设置路由
使用HandleFunc函数设置服务器路由,让服务器按照规则去处理浏览器发出的不同请求 go //pattern:路由的路径和规则 //handler:路由处理函数 func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler) }
举个例子:
我们写一个设置感谢掘金的路由规则 ```go
http.HandleFunc("/ThankJueJin",thankJueJin)
//Write为一个接口,http.ResponseWriter实现了这个接口的所有方法。 func thankJueJin(w http.ResponseWriter,req *http.Request) { io.WriteString(w,"感谢掘金") }
```
ListenAndServe启动
使用ListenAndServe函数启动一个HTTP服务器,它同时绑定了IP和端口、启动侦听、提供HTTP服务的作用。 go // addr为服务器地址,handler为服务器提供的函数指针(常用nil) func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return server.ListenAndServe() }
举个例子: go 服务器地址为本地8080 err :=http.ListenAndServe("8080",nil) if err !=nil{ log.Fatal("ListenAnd---",err)}
我们看一下完整代码: ``` package main
import ( "io" "log" "net/http" )
func thankJueJin(w http.ResponseWriter,req *http.Request) { io.WriteString(w,"感谢掘金") } func main() {
http.HandleFunc("/ThankJueJin",thankJueJin) err:=http.ListenAndServe(":8080",nil) if err != nil{ log.Fatal("ListenAnd---",err)} } } ``` 效果图:
本文正在参加技术专题18期-聊聊Go语言框架