这是我参与「第三届青训营 -后端场」笔记创作活动的的第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
运行效果
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的服务器功能
😎😎😎又是我,我还是小小分割线
都用心看到这里了,那就求个赞吧😘
🥳🥳🥳如果小伙伴有其他的小知识,一定不要忘了在评论区讨论哟,多多讨论,生态才会越来越好