Details: http://research.swtch.com/interfaces
Sidenote, you may or may not have meant a panic - so i just want to clarify.
Casting an interface to a type incorrectly will not cause a panic/crash, assuming you use the proper syntax.
// Will panic foo := myInterface.(BadType) // Will not panic foo, ok := myInterface.(BadType)