day4

command
v0.0.0-...-9f22e7b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 28, 2020 License: MIT Imports: 9 Imported by: 0

README

Pohjana Tero Karvinen 2020: Go Programming Course 2020
Tehtävän teossa on käytetty apuna Go:n dokumentaatiota.

Oma ohjelma: WeatherApp

Kurssin viimeinen tehtävä on oma ohjelma, jossa on tarkoitus käyttää kurssilla opeteltuja taitoja, sekä syventää Go kielen osaamista.

Ohjelman aiheeksi valitsin edellisen päivän tehtävässä ideoidun sää ohjelman.

WeatherApin tarkoitus on kertoa käyttäjälle tämän hetkinen sää (lämpötila, sateen mahdollisuus, tuulen nopeus, kuvaus säästä), sekä antaa mahdollisuus sään lokittamiseen vapaavalintaiseen tiedostoon CSV muodossa.

alt text

Lähdekoodi

Binääri Linux järjestelmille

Binääri Mac järjestelmille

Binääri Windows järjestelmille

Lisenssi

Aloitin ohjelman teon noin klo. 14 ja ohjelman ensimmäinen versio piti palauttaa saman päivän aikana ennen klo 20. Ensimmäinen versio ohjelmasta löytyy täältä. Ensimmäisessä versiossa ohjelman seuraavat ominaisuudet toimivat:

  • Json datan hakeminen API:sta
  • Datan esittäminen tulosteena
  • Flageilla voi antaa koordinaateilla oman lokaation säätä varten
  • Flagilla voi antaa valinnaisen tiedoston, johon dataa tallennetaan
  • Datan tulostaminen tiedostoon uudelle riville, mikäli flagilla on annettu tiedosto, johon data tallennetaan

Testasin ensimmäisen version toimintaa, ja totesin sen toimivan odotetusti kuva.

Viimeiseen versioon lisäsin seuraavat ominaisuudet aikaisemman (v1) version ominaisuuksien lisäksi:

  • Tiedostoon data tulostuu CSV formaatissa
  • Tiedostoon tulostetaan aikaleima datan keräyshetkestä
  • Mikäli ohjelmaan syötetään parametrinä tiedosto, jota ei ole olemassa ohjelma tekee tiedoston, ja lisää sen ensimmäiselle riville tietotyyppien selitykset.
  • Korjasin pienen bugin sateen todennäköisyyden esittämisessä, ennen ohjelma näytti 0.01% todennäköisyydeksi, vaikka sen olisi pitänyt olla 1%
  • Lisäsin API:n secret keyn tiedoston sisään, josta se luetaan ohjelmalle.

Ohjelman "viimeiseen" version sain valmiiksi saman päivän aikana noin klo 22.30.

Sää ohjelman API

Sää ohjelma käyttää Dark Sky:n API:a, josta säätiedot haetaan. Dark Sky:n sivuilta löytyy hyvät ohjeet API:n käyttämiseen, HUOM. Apple on ostanut kyseisen yrityksen ja uusia käyttäjiä ei ilmeisesti oteta palveluun..

API kyselyn muoto on seuraava:

https://api.darksky.net/forecast/apikey/latitude,longitude?units=auto&exclude=minutely,hourly,daily,alerts,flags

Esimerkkinä ohjelman oletus haku API:sta Helsingin säälle:

https://api.darksky.net/forecast/apikey/60.192059,24.945831?units=si&exclude=minutely,hourly,daily,alerts,flags

Ohjelman testaus

Testasin ohjelman kaikkia toimintoja. Ohjelmalle tehdyt testit löytyvät kuvasta.

Ohjelman käyttö

Jotta ohjelmani pystyy suorittamaan tarvitaan Dark Sky:n API:in avain. Ohjelma lukee avaimen .env tiedostosta, jonka pitää olla samassa hakemistossa suoritettavan binäärin kanssa. Avaimen sisältävässä .env tiedostossa ei saa olla ensimmäisen rivin lisäksi muita/tyhjiä rivejä.

Ohjelman voi suorittaa ilman parametrejä, jolloin se palauttaa Helsingin sen hetkisen sään:

$:~/kotitehtavat/Go-Programming-Course-2020/day4$ ./weather 
Current temperature: 11.32℃
Chance of rain: 0%
Current wind: 3.94㎧
Summary: Clear
-------------------
Powered by Dark Sky
https://darksky.net/poweredby/

Ohjelmaan voidaan syöttää parametreinä kaupungin sijainti. Koordinaatteja kaupungille voi hakea vaikka tällä verkkosivustolla. Esimerkiksi Espoon sijainti on latitude 60.205490 ja longitude 24.655899, joilla voi hakea Espoon sään:

$:~/kotitehtavat/Go-Programming-Course-2020/day4$ ./weather --latitude 60.205490 --longitude 24.655899
Current temperature: 11.49℃
Chance of rain: 0%
Current wind: 3.76㎧
Summary: Clear
-------------------
Powered by Dark Sky
https://darksky.net/poweredby/

Paramerinä voi myös syöttää vapaavalintaisen tiedoston, jolloin ohjelma tallentaa viimeiselle riville lämpötilatiedot CSV muodossa:

$:~/kotitehtavat/Go-Programming-Course-2020/day4$ ./weather --file test.csv
Current temperature: 11.16℃
Chance of rain: 0%
Current wind: 3.95㎧
Summary: Clear
-------------------
Powered by Dark Sky
https://darksky.net/poweredby/
$:~/kotitehtavat/Go-Programming-Course-2020/day4$ cat test.csv 
Time,Temperature,RainProbability,WindSpeed,Summary
"2020-05-28T23:14:32+03:00",11.16,0,3.95,"Clear"
Optiot (flagit)
Usage of ./weather:
  -file string
    	Filename for optional data logging
  -latitude string
    	City's latitude (default "60.192059")
  -longitude string
    	City's longitude (default "24.945831")
Kirjastot ja lähteet

Ohjelmassa käytin yhtä ulkopuolista kirjastoa "percent.go", jolla käänsin float64 arvon prosentiksi. Kirjaston lisenssi (MIT) löytyy täältä.

Ohjelman teossa käytin pääasiassa lähteinä Go:n omaa dokumentaatiota, mutta käytin myös muutamaa verkosta löytynyttä koodi esimerkkiä:

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL