Inspired by the countries gem for ruby.
Countries (ISO-3166-1), Country Subdivisions(ISO-3166-2), Currencies (ISO 4217), Geo Coordinates(ISO-6709) as well as translations, country borders and other stuff exposed as struct data.
All data is derived from the pariz/countries repo.
This is currently a work in progress, so things may change. More stuff will be added
go get github.com/pariz/gountries package main import ( "fmt""github.com/pariz/gountries" ) funcmain(){query:=gountries.New() /////////////////// Find sweden ///////////////////sweden, _:=query.FindCountryByName("sweden") // sweden, _ := query.FindCountryByAlpha("SE")// sweden, _ := query.FindCountryByAlpha("SWE")fmt.Println(sweden.Name.Common) // Output: Swedenfmt.Println(sweden.Name.Official) // Output: Konungariket Sverigefmt.Println(sweden.Translations["DEU"].Common) // Output: Schwedenfmt.Println(sweden.Translations["DEU"].Official) // Output: Königreich Schweden }package main import ( "fmt""github.com/pariz/gountries" ) funcmain(){query:=gountries.New() ////////////////////////////////////////////// Find the bordering countries of Sweden //////////////////////////////////////////////sweden, _:=query.FindCountryByAlpha("SWE") // "SE" also works..// Get the bordering countries of swedenfor_, country:=rangesweden.BorderingCountries(){fmt.Println(country.Name.Common) } // Output:// Finland// Norway////////////////////////////////////// Find all subdivisons for Sweden //////////////////////////////////////subdivisions:=sweden.SubDivisions() for_, subdivision:=rangesubdivisions{fmt.Println(subdivision.Name) } // Output:// Västerbottens län// Uppsala län// Södermanlands län// Gotlands län// Dalarnas län// ...//////////////////////////////////////////////////////////// Find all countries bordering Germany and Switzerland ////////////////////////////////////////////////////////////countryQuery:= gountries.Country{Borders: []string{"DEU", "CHE", }, } countries:=query.FindCountries(countryQuery) for_, c:=rangecountries{fmt.Println(c.Name.Common) } // Output:// Austria// France///////////////////////////////////////////////////////////////////// Calculate distance between Sweden and Germany (in Kilometers) /////////////////////////////////////////////////////////////////////se, _:=query.FindCountryByAlpha("SWE") de, _:=query.FindCountryByAlpha("DEU") distance:=gountries.MeasureDistanceHaversine(se, de) //distance := MeasureDistancePythagoras(se, de)fmt.Println(distance) // Output:// 1430.1937864547901distance=gountries.CalculateHaversine( se.Coordinates.MaxLatitude, se.Coordinates.MaxLongitude, de.Coordinates.MinLatitude, de.Coordinates.MinLongitude) fmt.Println(distance) // Output:// 2641.26145088825 }The data in the data/yaml subdirectory is embedded using go-bindata. Once you include this library in your project, you won't need to access the data directory. To add or update the data, make changes to the YAML files then run:
go-bindata -pkg gountries data/yaml/* Has a pretty solid test coverage but is constantly improving.
- Province/County querying (partially complete)
- Measurement between coordinates
- GeoJSON information
- Suggestions?