新闻中心
如何用 Golang 编写一个天气查询程序_Golang API 调用与 JSON 解析实战
答案是使用Golang调用OpenWeatherMap API实现天气查询。首先注册获取API密钥,通过https://api.openweathermap.org/data/2.5/weather接口发送GET请求,定义包含Name、Main、Sys等字段的结构体映射JSON响应,利用net/http发起请求,encoding/json解析结果,在main函数中传入城市和密钥,输出温度、湿度和国家信息,最终实现基础天气查询功能。

想用 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
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
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 模拟函数默认抛出错误以提高测试效率


2025-11-22
浏览次数:次
返回列表