型アサーション
i
が具体的な型T
を保持し、基になるT
の値を変数t
に代入する。
t := i.(T)
i
がT
を保持していない場合、この文はpanicを引き起こす。
型アサーションは2つの値(基になる値とアサーションが成功したかどうかを報告するブール値)を返すことができる。
i
がT
を保持していれば、t
は基になる値になり、ok
は真(true
)になる。
そうでなければ、ok
は偽(alse
)になり、 t
は型T
のゼロ値になり panic は起きない。
package main
import "fmt"
func main() {
var i interface{} = "hello"
s := i.(string)
fmt.Println(s)
s, ok := i.(string)
fmt.Println(s, ok)
f, ok := i.(float64)
fmt.Println(f, ok)
f = i.(float64) // panic
fmt.Println(f)
}
// hello
// hello true
// 0 false
// panic: interface conversion: interface {} is string, not float64
// goroutine 1 [running]:
// main.main()
// /tmp/sandbox3611871940/prog.go:17 +0x14f