This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
The compiler doesn't examine the contents of a method you're calling to decide whether it will ever return or not. As far as the compiler is concerned you call go(), and then print something out. To get an "unreachable statement" error you need it to be clear just by looking at static details of the method in question that it will never get there.