转到openweathermap预报返回类型

时间:2019-02-26 20:35:29

标签: json go openweathermap

我是新手,我正在尝试使用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,但在返回情况下,返回类型对我来说还不清楚。

感谢任何提示或示例链接。

1 个答案:

答案 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)
    }
}