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

相关推荐
SoraLuna几秒前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_6 分钟前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
Dream_Snowar1 小时前
速通Python 第三节
开发语言·python
高山我梦口香糖2 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
冷眼看人间恩怨2 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
信号处理学渣2 小时前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客2 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
jasmine s3 小时前
Pandas
开发语言·python
biomooc3 小时前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言
骇客野人3 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言