当前位置: 首页 > news >正文

Go语言中通过get请求获取api.open-meteo.com网站的天气数据

Go语言中通过get请求获取api.open-meteo.com网站的天气数据

继C++中使用cpp-httplib和nlohmann_json库实现http请求获取天气数据和Nodejs通过get请求获取api.open-meteo.com网站的天气数据、使用Java通过get请求获取api.open-meteo.com网站的天气数据、Python中通过get请求获取api.open-meteo.com网站的天气数据、C#中通过get请求获取api.open-meteo.com网站的天气数据,我们再使用Go语言实现对应功能。
以下是使用 Go 语言发送 HTTP GET 请求以获取 api.open-meteo.com 网站天气数据的示例代码:


示例代码

package mainimport ("encoding/json""fmt""io/ioutil""net/http"
)func getWeather() {// API URL 和查询参数baseURL := "http://api.open-meteo.com/v1/forecast"latitude := "37.8136"longitude := "144.9631"query := fmt.Sprintf("%s?latitude=%s&longitude=%s&current_weather=true", baseURL, latitude, longitude)// 发送 GET 请求resp, err := http.Get(query)if err != nil {fmt.Println("Error occurred while making the request:", err)return}defer resp.Body.Close()// 检查响应状态码if resp.StatusCode != http.StatusOK {fmt.Printf("Failed to retrieve data. Status code: %d\n", resp.StatusCode)return}// 读取响应数据body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("Error reading response body:", err)return}// 解析 JSON 数据var weatherData map[string]interface{}if err := json.Unmarshal(body, &weatherData); err != nil {fmt.Println("Error parsing JSON:", err)return}// 打印天气数据fmt.Println("Weather Data:")fmt.Println(weatherData)
}func main() {getWeather()
}

说明

  1. HTTP GET 请求:

    • 使用 http.Get 发送 GET 请求。
    • 查询参数(纬度、经度等)通过 fmt.Sprintf 拼接到 URL 中。
  2. 响应处理:

    • 检查响应状态码是否为 200 OK
    • 使用 ioutil.ReadAll 读取响应体。
  3. JSON 解析:

    • 使用 encoding/json 包解析 JSON 数据。
    • 将 JSON 数据解析为 map[string]interface{},便于动态访问字段。
  4. 错误处理:

    • 捕获网络请求错误、响应读取错误和 JSON 解析错误。

运行代码

  1. 保存文件
    将代码保存为 get_weather_data.go

  2. 运行程序
    在终端中运行以下命令:

    go run get_weather_data.go
    

示例输出

Weather Data:
map[latitude:37.8136 longitude:144.9631 generationtime_ms:0.123 utc_offset_seconds:0 timezone:GMT current_weather:map[temperature:20.5 windspeed:5.2 winddirection:180]]

注意事项

  1. JSON 数据访问:

    • 如果需要访问具体字段,可以使用类型断言。例如:
      currentWeather := weatherData["current_weather"].(map[string]interface{})
      temperature := currentWeather["temperature"].(float64)
      fmt.Printf("Current temperature: %.2f°C\n", temperature)
      
  2. 依赖管理:

    • Go 自带的 net/httpencoding/json 包已经足够处理 HTTP 请求和 JSON 数据解析,无需额外依赖。
  3. 网络连接:

    • 确保你的网络可以访问 http://api.open-meteo.com
  4. 扩展功能:

    • 如果需要发送 POST 请求或添加自定义头部,可以使用 http.NewRequesthttp.Client

示例扩展

如果需要打印当前温度,可以修改代码如下:

currentWeather := weatherData["current_weather"].(map[string]interface{})
temperature := currentWeather["temperature"].(float64)
fmt.Printf("Current temperature: %.2f°C\n", temperature)
http://www.dtcms.com/a/557195.html

相关文章:

  • 哪些网站可以做微课技术支持 英铭网站建设
  • STM32位带操作理论实践
  • 住房和城乡建设部的网站首页不懂网站怎么做平台
  • 禁止Windows 10升级至Windows 11的方法
  • 人工智能之数学基础:随机变量函数的分布(离散和连续)
  • 30.16.2.表现层框架设计
  • DMS 迁移错误:String Length Exceeds DDL Length 完整解决方案
  • 福建建设厅网站官网宣传推广方案
  • 网站搭建的步骤百度网站怎样做
  • 网站的建设与开发discover wordpress
  • apk反编译修改教程系列-----读懂 Android 签名机制:从 V1 到 V4的签名区别
  • 人工智能本体论!
  • 将Git项目的所有远程分支打包成压缩包文件
  • 做液压的公司网站佛山网站建设格式有哪些
  • 深圳做微商网站的公司二维码生成器app
  • WebClient发送请求示例
  • Wireshark TS | 接收数据超出接收窗口续
  • mapset的使用
  • 要事优先-深耕目标
  • 禄劝彝族苗族网站建设食品 技术支持 东莞网站建设
  • 宁波市省网站建设济南工程建设交易信息网
  • 伯克利哈斯商学院的金融工程硕士(MFE)
  • 政安晨【零基础玩转开源AI项目】video-subtitle-remover 去除视频字幕水印(图像也可以)(基于Ubuntu Linux系统)
  • 温州市名城建设集团有限公司网站二级域名如何申请
  • 【C++】模拟算法习题
  • QLoRA基础知识和微调原理学习
  • 在 vscode 中配置juypter notebook 插件
  • 石家庄好用的招聘网站门户网站网站建设
  • ENERGY Designer:重构跨平台GUI开发的高效解决方案
  • 网站建设要准备什么资料wordpress回复下载