2 ms·
> What if two patterns overlap but neither is more specific? For example, /posts/{id} and /{resource}/latest both match /posts/latest. There is no obvious answe
by irq-1 3y ago
> What if two patterns overlap but neither is more specific? For example, /posts/{id} and /{resource}/latest both match /posts/latest. There is no obvious answer to which takes precedence, so we consider these patterns to conflict with each other. Registering both of them (in either order!) will panic.
A panic? That's a bad dev experience. Why not say an earlier variable is more general -- or a later variable is more specific? /posts/{id} wins.
Consider /posts/{id} vs:
/posts/latest/{u} // wins (later variable)
/posts/{id}/latest // wins (more specific)
/posts/{id}/{id2} // wins (later variable. id2 must exist)
/{u}/posts/ // lose (earlier variable)
/posts/{otherId} // invalid (same path with different name)
/latest/{u} // no conflict
- mhsred5 3y agoPicking a winner in such a conflict leads to unexpected behavior if ordering changes.
- randomdata 3y ago> A panic? Sure. That's precisely what exceptions (panics) are for: To deal with programmer mistakes identified at runtime that the compiler failed to detect. The use is appropriate. If you want perfect compile-time safety, Go is not it. It prioritizes other tradeoffs. Such is engineering.