This code doesn't actually compile. You can't assign v to x.(type) like that.
I did have to put "return x" as the last statement, though, not return v. And I'm not sure I'm happy about an "abs" that happily returns a string if fed a string, but, well, that's Go.
Relevant bit of the spec: http://golang.org/ref/spec#Type_switches
But the short variable declaration in the type switch does indeed save the casts the OP was complaining about.
Even more correct and horrible: http://play.golang.org/p/ZMQKQhuUQT