我是新手,我正在尝试使用OpenWeatherMap构建一个小天气应用程序 和briandowns的go-package。
阅读当前天气没有问题 但是我无法处理预测方法的结果。
func main() {
apiKey := "XXXX"
w, err := owm.NewForecast("5", "C", "en", apiKey)
if err != nil {
log.Fatal(err)
}
w.DailyByName("London", 1)
data := w.ForecastWeatherJson
fmt.Println(data)
}
其中的apiKey需要替换为有效的apiKey(注册后可以免费获得)。
我的问题是从ForecastWeatherJson中提取信息。 定义为:
type ForecastWeatherJson interface {
Decode(r io.Reader) error
}
在Forecast.go文件中。
解码定义为:
func (f *Forecast5WeatherData) Decode(r io.Reader) error {
if err := json.NewDecoder(r).Decode(&f); err != nil {
return err
}
return nil
}
在Forecast5.go。
我真的不知道从哪里开始,因为我没有找到一个记录示例,该示例显示了处理其他语言以外的数据(所以我想这是一个特定的问题)。 我看到了如何在例如python,但在返回情况下,返回类型对我来说还不清楚。
感谢任何提示或示例链接。
答案 0 :(得分:0)
您所需的数据已经在w
参数中进行了解码,但是您需要键入assert来更正Weather类型。对于您的情况,因为您正在使用type=5
,所以应该使用owm.Forecast5WeatherData
。然后您的主体看起来像这样。
func main() {
apiKey := "XXXX"
w, err := owm.NewForecast("5", "C", "en", apiKey)
if err != nil {
log.Fatal(err)
}
w.DailyByName("London", 3)
if val, ok := w.ForecastWeatherJson.(*owm.Forecast5WeatherData); ok {
fmt.Println(val)
fmt.Println(val.City)
fmt.Println(val.Cnt)
}
}