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