package main import ( "errors" "io/ioutil" "net/http" "strings" ) const ( noaa = `http://weather.noaa.gov/pub/data/observations/metar/` noaaDecoded = noaa + `decoded/` noaaStations = noaa + `stations/` ) var notFound = errors.New("not found") func fetchMetar(base, station string) ([]string, error) { loc := base + strings.ToUpper(station[:4]) + ".TXT" resp, err := http.Get(loc) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode == http.StatusNotFound { return nil, notFound } body, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } return strings.Split(strings.TrimSpace(string(body)), "\n"), nil } func MetarDecoded(s string) ([]string, error) { return fetchMetar(noaaDecoded, s) } func MetarStation(s string) ([]string, error) { return fetchMetar(noaaStations, s) }