使用GO语言搭建HTTP服务器

140 阅读2分钟

使用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)}
}
}

效果图:

image.png

本文正在参加技术专题18期-聊聊Go语言框架