新闻中心

如何用 Golang 编写一个天气查询程序_Golang API 调用与 JSON 解析实战

2025-11-22
浏览次数:
返回列表
答案是使用Golang调用OpenWeatherMap API实现天气查询。首先注册获取API密钥,通过https://api.openweathermap.org/data/2.5/weather接口发送GET请求,定义包含Name、Main、Sys等字段的结构体映射JSON响应,利用net/http发起请求,encoding/json解析结果,在main函数中传入城市和密钥,输出温度、湿度和国家信息,最终实现基础天气查询功能。

如何用 golang 编写一个天气查询程序_golang api 调用与 json 解析实战

想用 Golang 写一个天气查询程序?其实不难。核心是调用公开的天气 API,获取 JSON 数据,然后解析并展示结果。下面一步步带你实现,从 API 调用到结构体定义,再到 JSON 解析,实战走起。

选择天气 API 并获取密钥

我们以 OpenWeatherMap 为例,它提供免费的天气数据接口。你需要先注册账号,获取一个 API Key。

关键接口地址:
https://api.openweathermap.org/data/2.5/weather?q=城市名&appid=你的密钥&units=metric
其中 units=metric 表示温度单位为摄氏度。

定义结构体来映射 JSON 响应

Golang 解析 JSON 的关键是定义与返回数据结构匹配的 struct。API 返回的数据较复杂,我们只提取关心的部分:

type Weather struct {
    Main struct {
        Temp     float64 `json:"temp"`
        Humidity int     `json:"humidity"`
    } `json:"main"`
    Name string `json:"name"`
    Sys  struct {
        Country string `json:"country"`
    } `json:"sys"`
}

字段标签 json:"xxx" 告诉解析器 JSON 中的键名。比如 Temp 对应的是 main.temp

发送 HTTP 请求并解析响应

使用标准库 net/http 发起 GET 请求,再用 encoding/json 解码:

CA.LA CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA
func getWeather(city, apiKey string) (*Weather, error) {
    url := fmt.Sprintf("https://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=metric", city, apiKey)
    
    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    if resp.StatusCode != 200 {
        return nil, fmt.Errorf("天气服务错误: %s", resp.Status)
    }

    var weather Weather
    err = json.NewDecoder(resp.Body).Decode(&weather)
    if err != nil {
        return nil, err
    }

    return &weather, nil
}

注意检查 HTTP 状态码,避免服务端出错时继续解析。

主函数调用并输出结果

在 main 中调用函数,打印天气信息:

func main() {
    apiKey := "your_api_key_here"
    city := "Beijing"

    weather, err := getWeather(city, apiKey)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("城市: %s, 国家: %s\n", weather.Name, weather.Sys.Country)
    fmt.Printf("温度: %.1f°C\n", weather.Main.Temp)
    fmt.Printf("湿度: %d%%\n", weather.Main.Humidity)
}

运行后你会看到类似:

城市: Beijing, 国家: CN
温度: 22.3°C
湿度: 65%

基本上就这些。Golang 处理 API 和 JSON 非常直接,只要结构体对得上,解析几乎零负担。你可以扩展支持多个城市、命令行输入,或者加上缓存机制。实战中多看 API 文档,结构体就能写准。

以上就是如何用 Golang 编写一个天气查询程序_Golang API 调用与 JSON 解析实战的详细内容,更多请关注其它相关文章!


# 天气查询  # js  # json  # go  # app  # golang  # 你会  # 普洱seo公司推荐23火星  # 外推seo违规词  # 为什么网站要首发推广呢  # 德州建设网站  # 吴江网站建设推广公司地址  # 学校院系网站建设方案  # 临汾seo公司到9火星  # 开封回收网站推广  # 卫浴推广营销策略有哪些  # 肇庆网站建设与制作  # 多个  # 就能  # 你可以  # 的是  # 复用  # 如何实现  # 如何使用  # 如何用  # 数据结构  # 标准库  # 状态码  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Go语言HTML解析:利用Goquery精准获取指定元素内容  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  Archive of Our Own官网直达 AO3最新可用地址一览  LINUX怎么设置定时任务_LINUX crontab配置教程  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  c++ dfs和bfs代码 c++深度广度优先搜索算法  Lar*el Form Request中唯一性验证在更新操作中的正确实现  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  windows10怎么查看本机ip_windows10命令提示符ipconfig使用  UC浏览器网页版登录入口官网 电脑版网址入口  C++ vector二维数组定义_C++ vector of vector用法  百度网盘网页版入口 百度网盘网页版官方登录网址  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略  Pandas DataFrame:高效添加条件计算列  css绝对定位元素脱离父容器怎么办_确保父元素position非static  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  C++如何比较两个字符串_C++ string compare函数与操作符对比  Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  PHP 枚举:根据字符串获取枚举案例的策略与实现  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】  处理嵌套交互式控件:前端可访问性指南  机器学习中对数变换预测结果的反向还原  Animex动漫社网入口地址 Animex动漫社网正版在线入口  如何仅使用CSS更改登录界面背景图像图标的颜色  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  天眼查企业查询官网入口 天眼查官方网页版查询  python3时间如何用calendar输出?  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发  抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  Django表单提交验证失败后保持字段值不刷新  汽水音乐在线版入口_汽水音乐网页播放手册  淘宝网网页版登录入口 淘宝官方网页版快捷登录  如何使 Jest 模拟函数默认抛出错误以提高测试效率 

搜索