A binning method that is fast and does not suffer from the hierarchical issue you mention: quadtiles.
Looks like there is an implementation in Go [0]. I haven't tried the kind of geofencing you mention in memory, but I've had success with PostGIS.
[0] https://github.com/volkerp/goquadtree
Edit: that repo seems to be very old. Quadtiles have been implemented successfully in a variety of languages, you should be able to find something more suitable.