Golangの型注釈(アサーション)について具体的に解説します

Golang

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)
}

型アサーションのメリットとは?

型アサーションは、インターフェース変数から曖昧さを取り除くのに有効です。

また、これはインターフェイス変数内の具体的な値をアンラップするのに役立ちます。

タイトルとURLをコピーしました