golang tree data structure