package traverse type EventStage int const ( EventStart EventStage = iota EventComplete ) type TraversalEvent struct { Stage EventStage Result TraversalResult IsResolve bool } type EventHandler func(TraversalEvent) type TraverserHooks struct { OnEvent EventHandler } func (h *TraverserHooks) emit(stage EventStage, result TraversalResult, isResolve bool) { if h == nil || h.OnEvent == nil { return } h.OnEvent(TraversalEvent{ Stage: stage, Result: result, IsResolve: isResolve, }) }