首页 > 后端开发 > Golang > 正文

Golang net/net/http HTTP请求与响应处理示例

P粉602998670
发布: 2025-10-10 20:54:01
原创
628人浏览过
Go语言通过net/http包实现HTTP客户端与服务端。使用http.Get发起GET请求,需defer关闭resp.Body;发送JSON数据可用http.Post或http.NewRequest;服务端通过http.HandleFunc注册路由,ResponseWriter返回响应;读取请求体时用json.NewDecoder解析流式数据;注意资源释放与错误处理。

golang net/net/http http请求与响应处理示例

Go语言的net/http包提供了简洁而强大的HTTP客户端和服务端支持。通过标准库,可以轻松实现HTTP请求发送和响应处理。以下是一些常见用法示例,涵盖客户端发起请求与服务端处理响应的基本场景。

发起HTTP GET请求

使用http.Get可以快速向远程服务器发起GET请求。返回的响应包含状态码、头信息和响应体。

示例代码:

resp, err := http.Get("https://httpbin.org/get")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

body, _ := io.ReadAll(resp.Body)
fmt.Printf("状态码: %d\n", resp.StatusCode)
fmt.Printf("响应体: %s\n", body)
登录后复制

注意:resp.Body必须关闭以释放连接资源,通常使用defer确保关闭。

立即学习go语言免费学习笔记(深入)”;

发起带参数的POST请求

发送表单数据或JSON内容时,可使用http.Posthttp.NewRequest结合自定义客户端。

发送JSON示例:

data := map[string]string{"name": "golang", "version": "1.21"}
jsonData, _ := json.Marshal(data)

resp, err := http.Post("https://httpbin.org/post", "application/json", bytes.NewBuffer(jsonData))
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
登录后复制

这种方式适合调用REST API,Content-Type设置为application/json。

Flawless AI
Flawless AI

好莱坞2.0,电影制作领域的生成式AI工具

Flawless AI 32
查看详情 Flawless AI

处理HTTP请求的服务端

Go也可以作为HTTP服务端,通过注册路由处理器函数来响应请求。

简单服务端示例:

http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)
    fmt.Fprintf(w, `{"message": "Hello from Go!"}`)
})

log.Println("服务器启动在 :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
登录后复制

HandleFunc用于绑定路径与处理函数,ResponseWriter用于写入响应头和正文。

读取请求体与解析参数

服务端常需读取客户端提交的数据。对于POST或PUT请求,可通过r.Body读取原始数据。

示例:接收JSON请求体

http.HandleFunc("/submit", func(w http.ResponseWriter, r *http.Request) {
    var input map[string]interface{}
    if r.Body == nil {
        http.Error(w, "请求体为空", 400)
        return
    }

    err := json.NewDecoder(r.Body).Decode(&input)
    if err != nil {
        http.Error(w, err.Error(), 400)
        return
    }

    fmt.Fprintf(w, "收到数据: %+v", input)
})
登录后复制

使用json.NewDecoder能高效解析流式数据,适用于大体积请求体。

基本上就这些。net/http的设计简洁直观,无论是写微服务还是调用外部接口都很方便。掌握基本的请求构造与响应解析,就能应对大多数Web交互场景。不复杂但容易忽略的是资源释放和错误处理,务必养成良好习惯。

以上就是Golang net/net/http HTTP请求与响应处理示例的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号