package main import ( "fmt" "time" "github.com/fatih/color" ) // WeatherAPI ... type WeatherAPI struct { Base string `json:"base"` Name string `json:"name"` Weather []Weather `json:"weather"` Sys Sys `json:"sys"` Main Main `json:"main"` Wind Wind `json:"wind"` Coord Coord `json:"coord"` Rain Rain `json:"rain"` Clouds Cloud `json:"cloud"` DT int64 `json:"dt"` Visability int64 `json:"visibility"` TimeZone int `json:"timezone"` ID int `json:"id"` COD int `json:"cod"` } // Coord ... type Coord struct { Lon float64 `json:"lon"` Lat float64 `json:"lat"` } // Weather ... type Weather struct { Main string `json:"main"` Description string `json:"description"` Icon string `json:"icon"` ID int `json:"id"` } // Main ... type Main struct { Temp float64 `json:"temp"` FeelsLike float64 `json:"feels_like"` TempMin float64 `json:"temp_min"` TempMax float64 `json:"temp_max"` Pressure float64 `json:"pressure"` Humidity float64 `json:"humidity"` } // Wind ... type Wind struct { Speed float64 `json:"speed"` Deg float64 `json:"deg"` Gust float64 `json:"gust"` } // Rain ... type Rain struct { T1h float64 `json:"1h"` } // Cloud ... type Cloud struct { All int `json:"all"` } // Sys ... type Sys struct { Country string `json:"country"` Types int `json:"type"` ID int64 `json:"id"` Sunrise int64 `json:"sunrise"` Sunset int64 `json:"sunset"` } func iconToEmoji(icon string) { //info. from https://openweathermap.org/weather-conditions var emoji string switch icon { case "Clouds": emoji = "☁️" case "Drizzle": emoji = "🌧️" case "Rain": emoji = "🌧️" case "Snow": emoji = "❄️" case "Clear": emoji = "☀️" case "Mist": emoji = "🌫️" case "Tornado": emoji = "🌪️" case "Thunderstorm": emoji = "⛈" default: emoji = "" } fmt.Print(emoji) } func printWeather(data WeatherAPI) { weatherData := data white := color.New(color.FgWhite) boldWhite := white.Add(color.Bold) dt := time.Now() boldWhite.Println(dt.Format("01/02/2006 15:04")) strLoc := weatherData.Name strCode := weatherData.Sys.Country strWeather := weatherData.Weather[0].Main strWeatherDetail := weatherData.Weather[0].Description strWeatherIcon := weatherData.Weather[0].Main strTemp := weatherData.Main.Temp strTempFl := weatherData.Main.FeelsLike strTempMin := weatherData.Main.TempMin strTempMax := weatherData.Main.TempMax strSunset := time.Unix(weatherData.Sys.Sunset, 0) strSunrise := time.Unix(weatherData.Sys.Sunrise, 0) boldWhite.Printf("📍Location: ") fmt.Printf("%v, %v\n", strLoc, strCode) boldWhite.Printf("Weather:") iconToEmoji(strWeatherIcon) fmt.Printf(" %v (%v)\n", strWeather, strWeatherDetail) boldWhite.Printf("🌡️ Temp: ") fmt.Printf("%v°C (Feels like: %v°C)\n(Min: %v°C, Max: %v°C)\n", strTemp, strTempFl, strTempMin, strTempMax) boldWhite.Printf("🌅Sunrise: ") fmt.Printf("%v\t", strSunrise.Format("15:04")) boldWhite.Printf("🌇Sunset: ") fmt.Printf("%v\n", strSunset.Format("15:04")) }