Nah, it could have been # and anything accept ? really.
The fragment identifier was required because it's the only way to change the URL without reloading the page.
! is used because it's an acceptable URL character that wasn't a ?. Google converts everything after the ! into a query string so you can't have 2 ? characters. Also ! is not much used in URLs so it was safe to choose.
Thus #!
There's no other reason for this URL pattern to exist accept that Google suggested it.
Nah, it could have been # and anything accept ? really.
The fragment identifier was required because it's the only way to change the URL without reloading the page.
! is used because it's an acceptable URL character that wasn't a ?. Google converts everything after the ! into a query string so you can't have 2 ? characters. Also ! is not much used in URLs so it was safe to choose.
Thus #!
There's no other reason for this URL pattern to exist accept that Google suggested it.