GoWeb之Web服务器的创建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TDCQZD/article/details/82632595

一、基本介绍

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

二、服务器创建

1、创建服务器的步骤:
1)创建一个函数处理器,函数的入参必须是http.ResponseWriter和http.Request指针类型
2)在main函数中调用http中的HandleFunc函数指定处理指定请求的处理器
3)设置路由。
2、实例

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)
}

3、处理器函数的实现原理:
Go语言拥有一种HandlerFunc函数类型,它可以将一个带有正确签名的函数f转换成一个带有方法f的Handler。
这里写图片描述
这里写图片描述

三、多路复用器

1、使用默认的多路复用器
1)使用处理器函数处理请求——推荐使用

package utils

import (
    "fmt"
    "net/http"
)
/*使用默认的多路复用器*/

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

//创建处理器函数
func handler(respone http.ResponseWriter, requst *http.Request)  {
    fmt.Fprintln(respone, "正在通过处理器函数处理你的请求")
}

func WebHandlerFunc()  {
    http.HandleFunc("/", handler)

    //创建路由
    http.ListenAndServe(":8080", nil)
}

2)使用处理器处理请求

package utils

import (
    "fmt"
    "net/http"
)
/*使用默认的多路复用器*/

/* 2)使用处理器处理请求*/

//创建处理器
type MyHandler struct{}
//处理器方法
func (mh *MyHandler)ServeHTTP(respone http.ResponseWriter, requst *http.Request)  {
    fmt.Fprintln(respone, "正在通过处理器处理你的请求")
}

func WebHandler()  {
    myHandler := MyHandler{}
    //调用处理器
    http.Handle("/",&myHandler)
    http.ListenAndServe(":8080", nil)
}

2、通过自定义多路复用器
1)使用处理器函数处理请求

package utils

import (
    "time"
    "fmt"
    "net/http"
)
/*使用自己创建的多路复用器*/

//创建处理器
type MyHandler struct{}

func (m *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "通过详细配置服务器的信息来处理请求!")
}

func main() {

    myHandler := MyHandler{}


    //创建Server结构,并详细配置里面的字段
    server := http.Server{
        Addr:        ":8080",
        Handler:     &myHandler,
        ReadTimeout: 2 * time.Second,
    }


    server.ListenAndServe()

}

这里写图片描述
这里写图片描述
2)使用处理器处理请求

package utils

import (
    "fmt"
    "net/http"
)
/*使用自己创建的多路复用器*/

//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintln(w, "通过自己创建的多路复用器处理请求!", r.URL.Path)
}

func WebCustom() {
    //创建多路复用器
    mux := http.NewServeMux()

    // http.HandleFunc("/", handler)
    mux.HandleFunc("/", handler)

    //创建路由
    // http.ListenAndServe(":8080", nil)
    http.ListenAndServe(":8080", mux)
}

这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/TDCQZD/article/details/82632595