本文详解 go 语言中发起 http 请求、读取响应体并安全解析 json 的完整流程,涵盖错误处理、资源释放和结构化解析等关键实践。
在 Go 中,http.Get() 仅返回 *http.Response 结构体(包含状态码、Header 等元信息),并不会自动读取或解析响应体内容。你看到的 &{200 OK ...} 输出正是 resp 变量本身的指针打印结果,而非 JSON 数据——真正的 JSON 内容位于 resp.Body 这个 io.ReadCloser 流中,必须显式读取并解码。
以下是修正后的标准实践代码(已补充必要导入和完整示例):
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
func getDuckDuckGo(keyword string) (map[string]interface{}, error) {
// 1. 发起请求并检查错误
resp, err := http.Get("https://api.duckduckgo.com/?q=" + keyword + "&format=json&no_html=1")
if err != nil {
return nil, fmt.Errorf("HTTP request failed: %w", err)
}
defer resp.Body.Close() // 2. 必须关闭响应体,防止连接泄漏
// 3. 检查 HTTP 状态码
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("API returned non-200 status: %d", resp.StatusCode)
}
// 4. 使用 json.Decoder 直接从 Body 解码(流式、内存友好)
var result map[string]interface{}
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
return nil, fmt.Errorf("JSON deco
de failed: %w", err)
}
return result, nil
}
func main() {
data, err := getDuckDuckGo("food")
if err != nil {
panic(err)
}
// 示例:安全提取字段(注意类型断言)
if definition, ok := data["AbstractText"].(string); ok && definition != "" {
fmt.Println("Definition:", definition)
} else {
fmt.Println("No definition found.")
}
if results, ok := data["RelatedTopics"].([]interface{}); ok && len(results) > 0 {
if first, ok := results[0].(map[string]interface{}); ok {
if firstText, ok := first["Text"].(string); ok {
fmt.Println("First related topic:", firstText)
}
}
}
}⚠️ 关键注意事项:
掌握这一模式,即可稳健处理任意 RESTful JSON API,为构建爬虫、微服务客户端等打下坚实基础。
# word
# html
# js
# json
# go
# ai
# 爬虫
# 状态码
# duckduckgo
# restful
# String
# if
# 结构体
# 指针
# Struct
# Interface
# 泛型
# nil
# map
# http
# https
# 而非
# 流式
# 这一
# 应在
# 省内
# 结构化
# 体内
# 客户端
# 若需
相关文章:
如何使用Golang table-driven基准测试_多组数据测量函数效率
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
建站主机选购指南:核心配置优化与品牌推荐方案
网站按钮制作软件,如何实现网页中按钮的自动点击?
家具网站制作软件,家具厂怎么跑业务?
如何在腾讯云服务器快速搭建个人网站?
如何自定义建站之星网站的导航菜单样式?
建站之星北京办公室:智能建站系统与小程序生成方案解析
中山网站推广排名,中山信息港登录入口?
制作网站的基本流程,设计网站的软件是什么?
已有域名能否直接搭建网站?
制作农业网站的软件,比较好的农业网站推荐一下?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
济南专业网站制作公司,济南信息工程学校怎么样?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
网站制作软件有哪些,制图软件有哪些?
开封网站制作公司,网络用语开封是什么意思?
建站168自助建站系统:快速模板定制与SEO优化指南
实惠建站价格推荐:2025年高性价比自助建站套餐解析
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
完全自定义免费建站平台:主题模板在线生成一站式服务
魔毅自助建站系统:模板定制与SEO优化一键生成指南
建站主机是否等同于虚拟主机?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
微信小程序 input输入框控件详解及实例(多种示例)
如何挑选优质建站一级代理提升网站排名?
三星网站视频制作教程下载,三星w23网页如何全屏?
建站之星ASP如何实现CMS高效搭建与安全管理?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
c# 在高并发下使用反射发射(Reflection.Emit)的性能
建站主机服务器选购指南:轻量应用与VPS配置解析
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何确保西部建站助手FTP传输的安全性?
如何选购建站域名与空间?自助平台全解析
如何选择香港主机高效搭建外贸独立站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何获取PHP WAP自助建站系统源码?
已有域名如何免费搭建网站?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何在橙子建站中快速调整背景颜色?
,网页ppt怎么弄成自己的ppt?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何自定义建站之星模板颜色并下载新样式?
,有什么在线背英语单词效率比较高的网站?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
建站VPS选购需注意哪些关键参数?
建站之星安装后如何自定义网站颜色与字体?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
*请认真填写需求信息,我们会在24小时内与您取得联系。