It's hard to answer the question without knowing more about the problem and your constraints, but here's three ideas.
First, perhaps you can store a composite type in the quad tree rather than just the GameObject pointer.
type QuadTreeEntry struct {
GameOb *GameObject
Entity interface{}
}
The "Entity" would be a *Client, and whatever else goes in your quadtree.
Second, you might consider if you need all of GameObject in the quadtree. Perhaps this would be better?
type QuadTreeEntry struct {
Position Point
Entity interface{}
}
This has the nice effect of removing an indirection to get at the Position in the QuadTree code, and it's harder to accidentally invalidate your QuadTree, since its not sharing Position data with the original entity.
Third, if efficiency isn't too important, you could do this:
type GameObjectGetter interface {
GetGameObject() *GameObject
}
func (c *Client) GetGameObject() *GameObject {
return &c.GameObject
}
So everything that goes in the quad tree would be a GameObjectGetter.