Types assertions

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型の変数が実際にチェックした型を持っている場合、チェックした型の変数として返す( interfaceT

  • 失敗:panic

ポイント(ではないかもしれないけど)

  1. assertionが成功した場合は、underlying typeの値を取得できる → 各typeに応じた処理が書ける
  2. 戻り値が1個の場合は、失敗すると panic が起きる