Go net/http的简单使用小结

 更新时间:2025年07月25日 08:30:46   作者:小许cod  
Go语言提供了一个功能丰富的net/http包,它提供了客户端和服务端的实现,使得我们可以比较轻易的创建http服务,下面就来介绍一下Go net/http使用,感兴趣的可以了解一下

Go语言提供了一个功能丰富的net/http包,它提供了客户端和服务端的实现,使得我们可以比较轻易的创建http服务。

创建一个简单的http服务

//step1. 建立 URL:Handler映射表
servemux := http.NewServeMux()
servemux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, world")
})

//step2. 创建并运行HTTP server
server := http.Server{Addr: ":8080", Handler: mux}
log.Fatal(server.ListenAndServe())

除了上面我们使用http.NewServeMux创建一个mux然后再调用HandleFunc外我们可以也可以这样使用

//直接调用http的Handle方法
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, world")
})

//Handle函数原型
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
	DefaultServeMux.HandleFunc(pattern, handler)
}

// DefaultServeMux is the default ServeMux used by Serve.
var DefaultServeMux = &defaultServeMux

var defaultServeMux ServeMux

HandleFunc其实也是调用了ServeMux的HandleFunc方法,只是使用了DefaultServeMux这个默认实例的用法,这种使用方式在其他库也是常见的一种方式

Client

Client类型代表HTTP客户端。它的零值(DefaultClient)是一个可用的使用DefaultTransport的客户端,这里其实跟DefaultServeMux一样的实现方。
我们也可以自己实例化一个client

client := &http.Client{
    //指定处理重定向的策略
	CheckRedirect: redirectPolicyFunc, 
	//指定本类型的值执行请求的时间限制
	Timeout:30,  
}
//发送Get请求
resp, err := client.Get("http://example.com")

不过不管是使用默认还是自己实例化client,底层都是调用do方法,然后基于do方法做Get/Post/PostForm的上层封装。PostForm的话是提交表单,url.Values类型的data会被编码为请求的主体。Post数据的类型一般会设为"application/x-www-form-urlencoded"。

resp, err := http.PostForm("http://example.com/form",
	url.Values{"key": {"Value"}, "id": {"123"}})
	
//实际调用方法,Get/Post都是基于do方法做的封装
func (c *Client) do(req *Request) (retres *Response, reterr error) {

上层对do方法的封装主要体现在对Request结构传递的不同,比如设置Request的Method(请求方式Get、Post),具体的Request结构体的可以在net/http/client.go看到。

Request结构

Request类型代表一个服务端接受到的或者客户端发送出去的HTTP请求,在Client发送请求是,也会传递一个request。

之前遇到一个怎么在request(请求)中可以使用下面方式获取client使用PostForm发送请求参数的问题,可以用到下面这种方式。

//ParseForm解析URL中的查询字符串,并将解析结果更新到r.Form字段,也就是 url.Values
func (r *Request) ParseForm() error

//接收经过ParseForm的值
func (r *Request) FormValue(key string) string
func (r *Request) PostFormValue(key string) string

文件上传的话使用Fromfile

//FormFile返回以key为键查询r.MultipartForm字段得到结果中的第一个文件和它的信息
func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error)

Response结构

Response代表一个HTTP请求的回复,该结构主要有比如StatusCode状态码、Body回复主体等信息

type Response struct {
    Status     string // 例如"200 OK"
    StatusCode int    // 例如200
    Proto      string // 例如"HTTP/1.0"
    ProtoMajor int    // 例如1
    ProtoMinor int    // 例如0
    Header Header     // Header保管头域的键值对。
    Body io.ReadCloser  // Body代表回复的主体。
    ContentLength int64 // ContentLength记录相关内容的长度。
    TransferEncoding []string     // 按从最外到最里的顺序列出传输编码
    Close bool         //Close记录头域是否指定应在读取完主体后关闭连接
    Trailer Header     //Trailer字段保存和头域相同格式的trailer键值对
    Request *Request    // Request是用来获取此回复的请求
    TLS *tls.ConnectionState    // TLS包含接收到该回复的TLS连接的信息
}

总结

net/http包我们在日常开发中长会用到的一些使用大概描述了一下,比如怎么创建一个web服务,发送请求调用do方法,request和response的结构等。后面打算分享下自己对处理http请求流程的理解,哈哈,先抛出几个问题:ServeHttp是什么,如果我们想实现自己的处理逻辑该怎么做,接口动态转发

到此这篇关于Go net/http的简单使用小结的文章就介绍到这了,更多相关Go net/http使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言中的日期与时间用法详细介绍

    Go语言中的日期与时间用法详细介绍

    Go语言提供了丰富的日期与时间处理函数,涵盖了从获取当前时间到格式化、时区转换、定时器和计时器的功能,这篇文章主要给大家介绍了关于Go语言中日期与时间用法的相关资料,需要的朋友可以参考下
    2024-06-06
  • go使用支付宝沙箱实现支付宝支付的操作步骤

    go使用支付宝沙箱实现支付宝支付的操作步骤

    支付宝沙箱支付是支付宝提供的一个测试环境,用于开发者在不影响真实交易的情况下进行支付接口的开发和调试,本文给大家介绍了go使用支付宝沙箱实现支付宝支付的操作步骤,文中有详细的代码示例和图文供大家参考,需要的朋友可以参考下
    2024-03-03
  • golang中定时器cpu使用率高的现象详析

    golang中定时器cpu使用率高的现象详析

    这篇文章主要给大家介绍了关于golang中定时器cpu使用率高的现象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • golang敏感词过滤的实现

    golang敏感词过滤的实现

    本文主要介绍了golang敏感词过滤的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Go语言共享内存读写实例分析

    Go语言共享内存读写实例分析

    这篇文章主要介绍了Go语言共享内存读写方法,实例分析了共享内存的原理与读写技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • golang实现文件上传并转存数据库功能

    golang实现文件上传并转存数据库功能

    这篇文章主要为大家详细介绍了golang实现文件上传并转存数据库功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Go语言单链表实现方法

    Go语言单链表实现方法

    这篇文章主要介绍了Go语言单链表实现方法,实例分析了基于Go语言的单链表实现原理与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Golang简介与基本语法的学习

    Golang简介与基本语法的学习

    这篇文章主要介绍了Golang简介与基本语法的学习,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go语言中内建函数make的使用

    Go语言中内建函数make的使用

    在Go语言编程中,make函数是一个重要的内建函数,它用于创建和初始化切片、映射和通道,握 make 的使用方法,可以帮助我们更高效地管理内存和数据结构
    2024-09-09
  • Go项目分层下的最佳error处理方式分享

    Go项目分层下的最佳error处理方式分享

    这篇文章主要来和大家一起探讨 Go 项目分层下的最佳 error 处理方式,准备好了吗?准备一杯你最喜欢的饮料或茶,随着本文一探究竟吧
    2023-06-06

最新评论