golang web笔记-1.创建Web Server和Handler请求

1. 创建http web server的两个方法

1.1. 方式一:http.ListenAndServe(addr string, handler Handler)

  • addr string:监听地址,如果为"" ,那么就是所有网络接口的80接口
  • handler Handler:如果为nil,那么就是DefaultServeMux,DefaultServeMux是一个multiplexer(可以看作是路由器)
Go 复制代码
package main

import (
    "net/http"
)

func main() {
    // 使用http.ListenAndServe 就可以创建一个web服务,但是这个时候启动访问是404,因为 handle=nil
    http.ListenAndServe("localhost:8080", nil)

}

1.2. 方式2:使用http.Serve{}

http.Server是一个struct有两个常用参数(Addr 、Handler) 和一个函数ListenAndServe

  • addr string:监听地址,如果为"" ,那么就是所有网络接口的80接口
  • handler Handler:如果为nil,那么就是DefaultServeMux,DefaultServeMux是一个multiplexer(可以看作是路由器)
  • ListenAndServe()函数
Go 复制代码
package main

import "net/http"

func main() {
    server := http.Server{
        Addr:    "localhost:8080",
        Handler: nil,
    }
    server.ListenAndServe()
}

2. Handler

  • handler处理http请求的的核心接口
  • handle 定义了一个方法ServerHTTP()
    • ResponseWriter 处理请求响应
    • Request接收请求

2.1. 向web server 添加Handler

2.1.1. 方法一:http.Handle(pattern string, handler Handler)

  • pattern string: 路由,访问路径

  • handler Handler:Handler

    package main

    import "net/http"

    // 1. 创建结构体
    type helloHandler struct{}
    type aboutHandler struct{}

    // 2. 创建结构体的方法,实现ServeHTTP方法,并在方法中书写代码逻辑
    func (m *helloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello World!"))
    }

    func (m *aboutHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("About!"))
    }

    func main() {
    server := http.Server{
    Addr: "localhost:8080",
    Handler: nil,
    }
    //3.创建结构提的实例
    hello := helloHandler{}
    about := aboutHandler{}
    //4. 使用http.Handle 注册handler
    //http.Handle 有两个参数,第一个是请求路径,第二个是Handle的指针变量
    http.Handle("/hello", &hello)
    http.Handle("/about", &about)
    server.ListenAndServe()
    }

2.1.2. 方法二:http.HandleFunc(pattern string, handler func(ResponseWriter, *Request))

  • pattern string: 路由,访问路径
  • handler func(ResponseWriter, *Request):和handler结构相同的函数,HandleFunc内部会将传入的函数转换为handler并调用http.Handle(pattern string, handler Handler)方法实现注册
Go 复制代码
package main

import "net/http"

// 1. 创建执行逻辑的函数
func welcome(writer http.ResponseWriter, request *http.Request) {
    writer.Write([]byte("welcome"))
}
func main() {
    server := http.Server{
        Addr:    "localhost:8080",
        Handler: nil,
    }

    //2.使用 http.HandleFunc 注册handler
    http.HandleFunc("/welcome", welcome)
    //http.HandlerFunc(函数) 会把传入的函数转换为handler 所以http.HandleFunc("/welcome", welcome) 等同于 http.Handle("/welcome", http.HandlerFunc(welcome))
    //http.Handle("/welcome", http.HandlerFunc(welcome))
    //或者使用匿名函数
    http.HandleFunc("/home", func(writer http.ResponseWriter, request *http.Request) {
        writer.Write([]byte("home"))
    })
    server.ListenAndServe()
}

2.2. 内置handler

1. http.NotFoundHandler()

func NotFoundHandler() Handler

返回一个handler,给每个请求的响应都是404 page not found

2.http.RedirectHandler()

func RedirectHandler(url string, code int) Handler

返回一个handler,使用给定的状态吗把每个请求跳转到指定的url

url:要跳转的url

code:状态吗

3.http.StripPrefix()

func StripPrefix(prefix string, h Handler) Handler

返回一个handler,从请求的url中去掉指定的前缀,然后再调用另一个handler

如果请求的url与提供的前缀不符,返回404

prefix:需要移除的字符

h:需要被调用的handler

4. http.TimeoutHandler()

func TimeoutHandler(h Handler, dt time.Duration, msg string) Handler

返回一个handler,用来在指定时间内运行传入的handler

h:需要被修饰的handler,

dt:handler允许处理的时间

msg:如果超时就把msg返回给请求

5. http.FileServer()

func FileServer(root FileSystem) Handler

返回一个handler,基于root的文件系统来响应请求

root:访问的根目录,使用 http.Dri将根目录转换为FileSystem

相关推荐
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法
_落纸2 天前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
echoarts2 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Alice-YUE2 天前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha2 天前
SpringBoot
笔记·学习
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题2 天前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说2 天前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔2 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
我是菜鸟0713号2 天前
Qt 中 OPC UA 通讯实战
开发语言·qt