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

相关推荐
暴怒香菜统治世界4 分钟前
c语言--结构体
c语言·开发语言·数据结构·笔记·算法
kuilaurence5 分钟前
C语言中的输入控制重要基础
c语言·开发语言
九离十5 分钟前
C语言初识(一)
c语言·开发语言
coffee_baby13 分钟前
《解锁高效流程设计:深度剖析责任链模式与实战应用》
java·开发语言·责任链模式
晴子呀19 分钟前
一个有趣的编程题实战----交替打印线程
java·开发语言
EterNity_TiMe_22 分钟前
【Linux基础IO】深入解析Linux基础IO缓冲区机制:提升文件操作效率的关键
linux·运维·服务器·开发语言·学习·性能优化·学习方法
www.www24 分钟前
获取鼠标当前位置上的元素
开发语言·javascript·ecmascript
Jet-W1 小时前
Ruby基础语法
开发语言·后端·ruby
胡净1 小时前
java并发线程02
java·开发语言
AutoAutoJack1 小时前
C# 事件(Event)应用说明二
开发语言·数据结构·算法·架构·c#