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

相关推荐
娅娅梨3 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
汤米粥8 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
冰淇淋烤布蕾11 分钟前
EasyExcel使用
java·开发语言·excel
拾荒的小海螺17 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
秀儿还能再秀32 分钟前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
WCF向光而行37 分钟前
Getting accurate time estimates from your tea(从您的团队获得准确的时间估计)
笔记·学习
马剑威(威哥爱编程)42 分钟前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
好睡凯1 小时前
c++写一个死锁并且自己解锁
开发语言·c++·算法
java—大象1 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计