From f162a3300d90ab6e1cf88eec0bd734f9f7b31b65 Mon Sep 17 00:00:00 2001 From: Archie Fox Date: Mon, 24 Mar 2025 21:10:02 +0300 Subject: [PATCH] Weather app: http requests --- go-demo-5/geo/geo.go | 34 ++++++++++++++++++++++++++++++++++ go-demo-5/main.go | 14 ++++++++------ 2 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 go-demo-5/geo/geo.go diff --git a/go-demo-5/geo/geo.go b/go-demo-5/geo/geo.go new file mode 100644 index 0000000..766898d --- /dev/null +++ b/go-demo-5/geo/geo.go @@ -0,0 +1,34 @@ +package geo + +import ( + "encoding/json" + "errors" + "io" + "net/http" +) + +type GeoData struct { + City string `json:"city"` +} + +func GetMyLocation(city string) (*GeoData, error) { + if city != "" { + return &GeoData{ + City: city, + }, nil + } + resp, err := http.Get("https://ipapi.co/json/") + if err != nil { + return nil, err + } + if resp.StatusCode != 200 { + return nil, errors.New("NOT200") + } + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + var geo GeoData + json.Unmarshal(body, &geo) + return &geo, nil +} diff --git a/go-demo-5/main.go b/go-demo-5/main.go index 84bc532..975ee2f 100644 --- a/go-demo-5/main.go +++ b/go-demo-5/main.go @@ -1,6 +1,7 @@ package main import ( + "demo/weather/geo" "flag" "fmt" @@ -8,15 +9,16 @@ import ( ) func main() { - // fmt.Println("Новый проект") - // name := flag.String("name", "Archie", "Имя пользователя") - // age := flag.Int("age", 49, "Возраст пользователя") - color.Green("__ПОГОДА__") city := flag.String("city", "", "Город пользователя") - format := flag.Int("format", 1, "Формат вывода погоды") + // format := flag.Int("format", 1, "Формат вывода погоды") flag.Parse() - fmt.Printf("Город: %s, формат: %d\n", *city, *format) + fmt.Printf("Город: %s\n", *city) + geoData, err := geo.GetMyLocation(*city) + if err != nil { + fmt.Println(err.Error()) + } + fmt.Println(*geoData) }