GO-Web 服务器的创建

第 2 章:Web 服务器的创建

2.1 简介

Go 提供了一系列用于创建 Web 服务器的标准库,而且通过 Go 创建一个服务器的步骤非常简单,只要通过 net/http 包调用ListenAndServe 函数并传入网络地址以及负责处理请求的处理器( handler )作为参数就可以了。如果网络地址参数为空字符串,那么服务器默认使用 80 端口进行网络连接;如果处理器参数为 nil,那么服务器将使用默认的多路复用器 DefaultServeMux,当然,我们也可以通过调用 NewServeMux 函数创建一个多路复用器。多路复用器接收到用户的请求之后根据请求的 URL 来判断使用哪个处理器来处理请求,找到后就会重定向到对应的处理器来处理请求,

2.2 使用默认的多路复用器(DefaultServeMux)

1)使用处理器函数处理请求

package main
import (
	"fmt"
	"net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r * http.Request) {
	fmt.Fprintln(w, "正在通过处理器函数处理你的请求")
}
func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}

a) HandleFunc 方法的说明
在这里插入图片描述
b) 处理器函数的实现原理:

  • Go 语言拥有一种 HandlerFunc 函数类型,它可以将一个带有正确签名的函数 f 转换成一个带有方法 f 的 Handler。
    在这里插入图片描述

2) 使用处理器处理请求

package main
import (
	"fmt"
	"net/http"
)
type MyHandler struct {}
func(h * MyHandler) ServeHTTP(w http.ResponseWriter, r *
	http.Request) {
	fmt.Fprintln(w, "正在通过处理器处理你的请求")
}
func main() {
	myHandler: = MyHandler {}
	//调用处理器
	http.Handle("/", & myHandler)
	http.ListenAndServe(":8080", nil)
}

i. Handle 方法的说明
在这里插入图片描述
ii. 关于处理器 Handler 的说明
在这里插入图片描述
也就是说只要某个结构体实现了 Handler 接口中的 ServeHTTP 方法那么它就是一个处理器

iii. 我们还可以通过 Server 结构对服务器进行更详细的配置
在这里插入图片描述

package main
import (
	"fmt"
	"net/http"
	"time"
)
type MyHandler struct {}
func(h * MyHandler) ServeHTTP(w http.ResponseWriter, r *
		http.Request) {
		fmt.Fprintln(w, "测试通过 Server 结构详细配置服务
			器 ")
		}
		func main() {
			myHandler: = MyHandler {}
			//通过 Server 结构对服务器进行更详细的配置
			server: = http.Server {
				Addr: ":8080",
				Handler: & myHandler,
				ReadTimeout: 2 * time.Second,
			}
			server.ListenAndServe()
		}

2.3 使用自己创建的多路复用器

  1. 在创建服务器时,我们还可以通过 NewServeMux 方法创建一个多路复用器
    在这里插入图片描述
package main
import (
	"fmt"
	"net/http"
)
func handler(w http.ResponseWriter, r * http.Request) {
	fmt.Fprintln(w, "通过自己创建的多路复用器来处理请求")
}
func main() {
	mux: = http.NewServeMux() 
    mux.HandleFunc("/myMux", handler)
	http.ListenAndServe(":8080", mux)
}

结构体 ServeMux
在这里插入图片描述
结构体 ServeMux 的相关方法
在这里插入图片描述

发布了2082 篇原创文章 · 获赞 2299 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/weixin_42528266/article/details/105344065