Golang中实现http server居然这么简单 | 青训营笔记

855 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第8篇笔记

😆在这里,我对今天所新学到的Golang在http标准库中的服务器功能做了一次总结

😜Golang的其他知识在哪里找呢,那你就问对了

👨‍💻Golang基础复习 - 掘金 (juejin.cn) 在这里我总结了一些这篇文章没有提到的一些知识

😊如果有小伙伴能想到更多知识,欢迎大家在评论区留言,那么我们就开始吧

👩‍💻👨‍💻哟西,一个棕~

😎😎😎我是小小分割线

Golang在http标准库中不仅有对http客户端的实现

还有对http服务器的实现

客户端实现可以发出http请求并解析收到的响应的功能

服务器则可以实现http server的功能

HTTP Server

对于一个后端语言,服务器的功能是无比重要的

而使用Golang实现一个是非常简单的事情

它不需要像JAVA一样需要Tomcat等服务器容器

我们有很多种方式进行服务器的创建

而最简单最常用的方法就是下面介绍的这种方法

使用HandleFunc()

最简单的方式莫过于使用HandleFunc()这个api

它需要搭配ListenAndServe()这个api

我们看看这两个api的使用方式

func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
   DefaultServeMux.HandleFunc(pattern, handler)
}

func ListenAndServe(addr string, handler Handler) error {
   server := &Server{Addr: addr, Handler: handler}
   return server.ListenAndServe()
}

我们可以看到HandleFunc()有两个参数

分别是

string类型的路径和一个处理方法

ListenAndServe()也有两个参数

分别是地址和一个handler

我们用着两个api来试一下

func main() {
   // 路径为"/hello"
   // 处理方法为一个匿名方法
   http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
      // 在这个处理方法中对writer写入字符串"hello"
      fmt.Fprintln(writer, "hello")
   })

   // 地址为8080端口
   // handler为nil,使用默认的handler
   http.ListenAndServe(":8080", nil)
}

在浏览器输入

http://localhost:8080/hello

运行效果

image.png

Handle()

我们也可以通过Handle()这个api做成效果

func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) }

它这个api的第二个参数和上面的不一样,这里它需要一个Handler对象

我们来看看Handler是什么样的

type Handler interface {
   ServeHTTP(ResponseWriter, *Request)
}

原来是一个接口啊

那我们就可以通过传入这个接口的实现类调用这个api

我们来试一试

// 建一个实现类
type myHandler struct {
}

// 实现Handler
func (m *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
   // 向writer中写入
   fmt.Fprint(w, "hello")
}

func main() {

   // 实例化一个实现类
   myHandler := new(myHandler)

   http.Handle("/hello", myHandler)

   // 地址为8080端口
   // handler为nil,使用默认的handler
   http.ListenAndServe(":8080", nil)
}

运行结果和上面一样

这样,我们就能做到通过使用http标准库中的api来进行Golang的服务器功能

😎😎😎又是我,我还是小小分割线

都用心看到这里了,那就求个赞吧😘

🥳🥳🥳如果小伙伴有其他的小知识,一定不要忘了在评论区讨论哟,多多讨论,生态才会越来越好