golang 构建HTTP服务

本文详细介绍了如何使用Golang构建HTTP服务,包括理解Multiplexer、Handler和Server的概念,以及注册路由、开启监听和处理请求的流程。重点讲述了ServeMux的路由映射和HandlerFunc如何转换为handler处理器,以及Server对象的使用。
摘要由CSDN通过智能技术生成

   一个go最简单的Http服务器程序

package main

import (
    "fmt"
    "net/http"
)

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "hello world")
}

func main() {
    http.HandleFunc("/", IndexHandler)
    http.ListenAndServe("127.0.0.0:8000", nil)
}

HTTP

   除去细节,理解HTTP构建的网络应用只要关注两个端--客户端(client)和服务端(server),两个端的交互来自client的request,以及server端的response。所谓的http服务器,主要在于如何接受client的request,并向client返回response。

   接收request的过程中,最重要的莫过于路由(router),即实现一个Multiplexer器。Go中既可以使用内置的mutilplexer--DefaultServeMux,也可以自定义。Multiplexer路由的目的就是为了找到处理器函数(hander),后者将对request进行处理,同时构建response。

  简单总结就是这个流程:

  因此,理解go中的http服务,,最重要的就是要理解Multiplexer和hander,Golang中的Multiplexer基于ServerMux结构,同时也实现了Handler接口。

  ·hander函数:具有func(w http.ResponseWriter, r *http.Requests)签名的函数

  ·handler处理器(函数):经过HanderFunc结构包装的handler函数,它实现了ServeHTTP接口方法的函数。调用handler处理器的ServeHTTP方法时,即调用handler函数本身。

  ·handler对象:实现了Hander接口ServeHTTP方法的结构。

   Golang的http处理流程可以用下面一张图表示,后面内容是针对图进行说明:

Handler

   Golang没有继承,类多态的方法可以通过接口实现。所谓接口则是定义声明了函数签名,任何结构只要实现了与接口函数签名相同的方法,就等同于实现了接口。go的http服务都是基于handler进行处理的。

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

    任何结构体,只要实现了ServeHTTP方法,这个结构就可以称之为handler对象。ServeMux会使用handler并调用其ServeHTTP方法处理请求并返回响应。
 

 

ServeMux

   了解了Handler之后,再看ServeMux。ServeMux源码很简单:

type ServeMux struct {
    mu    sync.RWMutex
    m     map[string]muxEntry
    hosts bool 
}

type muxEntry struct {
    explicit bool
    h        Handler
    pattern  string
}

   ServeMux结构中最重要的字段为m,这是一个map,k

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值