开发流程
- 引入需要的包
- 定义天气数据Json的构造函数
- http.Get 请求接口
- 解析json
- 输出天气数据字段
引入需要的包
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
定义 Weather Struct
go结构体内的变量首字母必须大写
type Weather struct {
Nums int
Cityid string
City string
Date string
Week string
Update_time string
Wea string
Wea_img string
Tem string
Tem_day string
Tem_night string
Win string
Win_speed string
Win_meter string
Air string
Pressure string
Humidity string
}
http.Get 请求接口
resp, err := http.Get("http://v1.yiketianqi.com/free/day?appid=85841439&appsecret=EKCDLT4I&unescape=1&city=")
if err != nil {
fmt.Println("请求失败:", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取响应失败:", err)
}
fmt.Println(string(body))
解析json
jsonData := []byte(string(body))
var wea Weather
err2 := json.Unmarshal(jsonData, &wea)
if err2 != nil {
fmt.Println("error:", err2)
return
}
输出天气数据字段
fmt.Println("城市名称:", wea.City)
fmt.Println("城市编号:", wea.Cityid)
fmt.Println("当前日期:", wea.Date, wea.Week)
fmt.Println("更新时间:", wea.Update_time)
fmt.Println("今日天气:", wea.Tem, "°", wea.Wea, wea.Tem_night, "°~", wea.Tem_day, "°")
fmt.Println("风向风力:", wea.Win, wea.Win_speed, wea.Win_meter)
fmt.Println("空气质量:", wea.Air)
fmt.Println("当前气压:", wea.Pressure)
fmt.Println("当前湿度:", wea.Humidity)
fmt.Println("数据来源:", "天气API(http://tianqiapi.com)")
附完整代码
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Weather struct {
Nums int
Cityid string
City string
Date string
Week string
Update_time string
Wea string
Wea_img string
Tem string
Tem_day string
Tem_night string
Win string
Win_speed string
Win_meter string
Air string
Pressure string
Humidity string
}
func main() {
resp, err := http.Get("http://v1.yiketianqi.com/free/day?appid=85841439&appsecret=EKCDLT4I&unescape=1&city=")
if err != nil {
fmt.Println("请求失败:", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取响应失败:", err)
}
fmt.Println(string(body))
jsonData := []byte(string(body))
var wea Weather
err2 := json.Unmarshal(jsonData, &wea)
if err2 != nil {
fmt.Println("error:", err2)
return
}
fmt.Println("城市名称:", wea.City)
fmt.Println("城市编号:", wea.Cityid)
fmt.Println("当前日期:", wea.Date, wea.Week)
fmt.Println("更新时间:", wea.Update_time)
fmt.Println("今日天气:", wea.Tem, "°", wea.Wea, wea.Tem_night, "°~", wea.Tem_day, "°")
fmt.Println("风向风力:", wea.Win, wea.Win_speed, wea.Win_meter)
fmt.Println("空气质量:", wea.Air)
fmt.Println("当前气压:", wea.Pressure)
fmt.Println("当前湿度:", wea.Humidity)
fmt.Println("数据来源:", "天气API(http://tianqiapi.com)")
}