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

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.Post或http.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。
千帆AppBuilder
百度推出的一站式的AI原生应用开发资源和工具平台,致力于实现人人都能开发自己的AI原生应用。
174 查看详情
处理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请求与响应处理示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1126701.html
微信扫一扫
支付宝扫一扫