⚡
【Go】型アサーションについて
構文
Go言語の型アサーションは、以下のような構文で表されます。
value, ok := x.(T)
xという変数に対して、Tはアサーションする型を表します。
-
xの実際の型がTである場合
- okにtrue
を代入
- valueにxの値をキャストして代入 -
xがTでない場合
- okに
false
を代入 - valueにはゼロ値を代入
- okに
アサーションの例
Go言語のインターフェース型またはany
型は、その値がどの型であっても格納することができます。
例えば、以下のようにインターフェース型の変数xを宣言し、int型の値10を代入することができます。
var x interface{} = 10
以下は、変数xがint型であるかどうかを判定するコードです。
var x any
x = 10
value, ok := x.(int)
if ok {
fmt.Printf("x is an int and its value is %d\n", value)
} else {
fmt.Println("x is not an int")
}
上記の例では、xの値がint型であるため、okはtrueに設定されます。そのため、valueに10が代入され、"x is an int and its value is 10"が出力されます。
いつ型アサーションを使うのか?
例えば共通のError
インターフェースを満たす、TimeoutError
などを利用したい場合。
if _, ok := err.(TimeoutError); ok {
// キャストが成功したのでタイムアウトエラーと判定可能
}
参考
Discussion