7.12 型アサーションと型switchの利用は控えめに
通常、引数や戻り値はそれに付随した型によって扱うべきであり、それ以外の型が使える可能性を求めるべきではない
型アサーションが使用されるのは、具象型の裏にあるインタフェースが別のインタフェースを実装していないかどうかチェックする場合
標準ライブラリのio.Copyでは、io.Writer型の引数がio.WriterToを実装している場合やio.Reader型の引数がio.RederFromを実装している場合、バッファ読み書きのるスキップされ効率的にコピーができるよう実装されている
新しいAPIを作成する場合にも型アサーションが有効。データベース用のドライバは徐々に変化していて、Go 1.7でコンテキストが追加され、Go 1.8から既存のインタフェースを新たにコンテキスト対応にしたものが定義された。ctxDriverStmtExecが一例
デコレータパターンを使用して同じインタフェースの実装をラップし、多層化するのが一般的だが、ラップした実装の中のインタフェースは型アサーションや型switchでは検知することができないので注意
インタフェースの新たな実装の漏れをなくすために、型switchを使用する場合はdefaultを必ず入れる