go语言 通过http包搭建简单web服务器 对http包源码的略微分析

本文介绍了如何使用Go语言的http包搭建一个简单的web服务器,并通过分析http包源码,理解web服务器处理HTTP协议的过程。主要内容包括http.HandleFunc与http.ListenAndServe的使用,HandlerFunc类型实现Handler接口的方式,ServeMux结构及其工作原理,以及如何自定义路由管理器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用go的http包搭建简单的服务器

package main

import (
    "fmt"
    "log"
    "net/http"
    "strings"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()       //解析参数,默认是不会解析的
    fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["friend"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello my friend!") //这个写入到w的是输出到客户端的
}

func main() {
    http.HandleFunc("/", sayhelloName)       //设置访问的路由
    err := http.ListenAndServe(":8080", nil) //设置监听的端口
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

go run 运行,这个时候其实已经在8080端口监听http请求了。
浏览器中输入http://localhost:8080/就可以看到一行英文:
“Hello my friend!”了。

下面看一下http包的源码,了解 web 服务器处理 http 协议的过程.
主要分析main()中的两个函数:http.HandleFunc(“/”, sayhelloName)和http.ListenAndServe(“:8080”, nil)

先看http.HandleFunc(“/”, sayhelloName)的定义。该函数给DefaultServeMux中相应的路由注册处理函数。


// HandleFunc registers the handler function for the given pattern
// in the DefaultServeMux.
// The documentation for ServeMux explains how patterns are matched.
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
    DefaultServeMux.HandleFunc(pattern, handler)
}

继续追踪方法DefaultServeMux.HandleFunc(pattern, handler)

// HandleFunc registers the handler function for the given pattern.
func (mux *ServeMu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值