Golangの型注釈(アサーション)は、インターフェースの基本型にアクセスし、インターフェース変数から曖昧さを取り除くのに役立ちます。
本記事では、Golanbgの型注釈(アサーション)について詳しく見ていきます。
Golangの型注釈(アサーション)とは
型アサーションは、インターフェース変数内の具体的な値を明らかにします。
以下はアサーションの具体的なコード例です。
package main
import "fmt"
func main() {
var i interface{} = 98
fmt.Println(i.(int)) // 98
}
Golangの型アサーションの構文
Golangの型アサーションの構文はシンプルで、インタフェース変数を取り、括弧で囲んで型にアクセスします。
// インターフェースを定義し、値を代入する
var i interface{} = "文字列です"
//型アサーション
valueOfI := i.(string) // "文字列です"
基本的な書き方は以下の通りです。
インターフェースの変数.(型)
なぜインターフェースを使うのか?
インターフェースは、どんな値でも取ることができる型です。
型アサーションと型スイッチを使うことで、それがどんな値を持ち、どんな型なのかを理解することができます。
型アサーションのチェック
型アサーションをチェックするには、2番目の戻り値を使用して確認します。
型アサーションをチェックする書き方は以下の通りです。
package main
import "fmt"
func main() {
var i interface{} = 98
value, ok := i.(string)
if ok == false {
fmt.Println("型アサーション失敗!")
} else {
fmt.Println(value)
}
// 型アサーション失敗!
fmt.Println(i.(int)) // 98
}
型アサーションとpanic
間違ったアサーションが発生すると、必ずpanicが発生します。
panicとは、予期せぬことができなかったエラーのことです。
package main
import "fmt"
func main() {
var i interface{} = 98
v := i.(string) // panic: interface conversion: interface {} is int, not string
fmt.Println(v)
}
型アサーションのメリットとは?
型アサーションは、インターフェース変数から曖昧さを取り除くのに有効です。
また、これはインターフェイス変数内の具体的な値をアンラップするのに役立ちます。