interface{メソッド}と書くとそのメソッドを実装した変数を格納できるようになりますが、interface{}と書くとなにもメソッドを実装していなくても格納できます。つまり、どんな型のどんな値でも格納できます。
(メソッドを実装する場合については他の回答者さんが既に書かれているので省略します)
https://github.com/golang/go/blob/master/src/fmt/print.go#L630
githubのgolangのfmtパッケージからPrintなどの実装を見ることができます。
どんな型の変数を渡しても適切に表示してくれるのは、このinterface{}型があるからです。
特殊なswitch文を使って型によって処理を分けることができます。
・interfaceを使わなければ実現できないことはあるのでしょうか。
例えば、fmt.PrintBool() fmt.PrintInt64()のようにすべてメソッドを分ければinterfaceがなくてもなんとかなります。
つまり実現できることが増えるかどうかというと微妙ですが、確実にメソッドを実装させることによってプログラミングをしやすくすることや、型を曖昧に扱えることで処理をだいぶ短く書けるなどのメリットがあります。
・具体的な便利な利用方法を教えてください。
https://play.golang.org/p/AcgSY04_io
switch i.(type){}
で処理を分けたり、
i.(int)
のようにして型アサート(型変換のinterfaceバージョンの呼称)ができたりします。
これを使って、簡単に型別の処理を書くことができます。
自分はjsonの解析でよく使います。
Qiita golangでのjsonのデコード
A Tour of Goでも有用な使い方が説明されていますし、もしやってなければやってみてはいかがでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。