Types assertions
interface typeの変数が実際に持っているtypeをチェックする
記法
// 戻り値2個パターン t, ok := i.(T) // 戻り値1個パターン t := i.(T)
戻り値(2個返す場合) t, ok := i.(T)
1個目:
成功:interface型の変数が実際にチェックした型を持っている場合、チェックした型のunderlying typeの値として返す
失敗:interface型の変数が実際にチェックした型を持っていない場合、チェックした型のZero valueを返す
2個目:
成功 :
true
失敗:
false
戻り値(1個返す場合) t := i.(T)
1個目:
成功:interface型の変数が実際にチェックした型を持っている場合、チェックした型の変数として返す(
interface
→T
)失敗:panic
ポイント(ではないかもしれないけど)
- assertionが成功した場合は、underlying typeの値を取得できる → 各typeに応じた処理が書ける
- 戻り値が1個の場合は、失敗すると
panic
が起きる