Releases: oschwald/geoip2-golang
Releases · oschwald/geoip2-golang
2.0.0-beta.2
2.0.0-beta.2
- BREAKING CHANGE: Replaced
IsZero()
methods withHasData()
methods on all
result structs (including Names). The new methods provide clearer semantics:
HasData()
returnstrue
when GeoIP data is found andfalse
when no data is
available. UnlikeIsZero()
,HasData()
excludes Network and IPAddress fields
from validation, allowing users to access network topology information even when
no GeoIP data is found. The Network and IPAddress fields are now always
populated for all lookups, regardless of whether GeoIP data is available. - BREAKING CHANGE: Replaced all anonymous nested structs with named types to
improve struct initialization ergonomics. All result structs (Enterprise, City,
Country) now use named types likeEnterpriseCityRecord
,CityTraits
,
CountryRecord
, etc. This makes it much easier to initialize structs in user
code while maintaining the same JSON serialization behavior. - BREAKING CHANGE: Changed
Location.Latitude
andLocation.Longitude
from
float64
to*float64
to properly distinguish between missing coordinates and
the valid location (0, 0). Missing coordinates are now represented asnil
and are omitted from JSON output, while valid zero coordinates are preserved.
This fixes the ambiguity where (0, 0) was incorrectly treated as "no data".
AddedLocation.HasCoordinates()
method for safe coordinate access. Reported
by Nick Bruun. GitHub #5.
2.0.0-beta.1
2.0.0-beta.1
- BREAKING CHANGE: Updated to use
maxminddb-golang/v2
which provides
significant performance improvements and a more modern API. - BREAKING CHANGE: All lookup methods now accept
netip.Addr
instead of
net.IP
. This provides better performance and aligns with modern Go
networking practices. - BREAKING CHANGE: Renamed
IsoCode
fields toISOCode
in all structs
to follow proper capitalization for the ISO acronym. Closes GitHub issue #4. - BREAKING CHANGE: Replaced
map[string]string
Names fields with structured
Names
type for significant performance improvements. This eliminates map
allocation overhead, reducing memory usage by 34% and allocations by 56%. - BREAKING CHANGE: Added JSON tags to all struct fields. JSON tags match
the correspondingmaxminddb
tags where they exist. Custom fields (IPAddress
andNetwork
) use snake_case (ip_address
andnetwork
). - BREAKING CHANGE: Removed
IsAnonymousProxy
andIsSatelliteProvider
fields
from all Traits structs. These fields have been removed from MaxMind databases.
Use the dedicated Anonymous IP database for anonymity detection instead. - BREAKING CHANGE: Go 1.24 or greater is now required. This enables the use
ofomitzero
in JSON tags to match MaxMind database behavior where empty
values are not included. - Added
IsZero()
method to all result structs (City, Country, Enterprise, ASN,
etc.) to easily check whether any data was found for the queried IP address.
Requested by Salim Alami. GitHub #32. - Added
Network
andIPAddress
fields to all result structs. TheNetwork
field
exposes the network prefix from the MaxMind database lookup, and theIPAddress
field
contains the IP address used during the lookup. These fields are only populated when
data is found for the IP address. For flat record types (ASN, ConnectionType, Domain,
ISP, AnonymousIP), the fields are namedNetwork
andIPAddress
. For complex types
(City, Country, Enterprise), the fields are located at.Traits.Network
and
.Traits.IPAddress
.
Requested by Aaron Bishop. GitHub #128. - Updated module path to
github.com/oschwald/geoip2-golang/v2
to follow
Go's semantic versioning guidelines for breaking changes. - Updated examples and documentation to demonstrate proper error handling
withnetip.ParseAddr()
. - Updated linting rules to support both v1 and v2 import paths during the
transition period.
1.11.0
1.9.0
1.8.0
1.7.0
1.6.1
1.6.0
1.5.0
1.4.0
- This module now uses Go modules. Requested by Axel Etcheverry.
GitHub #52. - DBIP databases are now supported. Requested by jaw0. GitHub #45.
- Allow using the ASN method with the GeoIP2 ISP database. Pull request
by lspgn. GitHub #47. - The example in the
README.md
now checks the length of the
subdivision slice before using it. GitHub #51.