Goにおけるアサーションの実装方法を教えてください。

Go言語では、型アサーションを使ってアサーションできます。

型アサーションの構文形式はx.(T)で、xはインタフェイスタイプ式の式、Tは具体的な型です。その意味は:xがインタフェイスタイプTを実現していたら真で、動的値(Dynamic Value)を返し、実現していなければパニック例外を作動させます。

次に、型アサーションを使った例を示します:

package main

import "fmt"

func main() {
	var i interface{} = "Hello"

	s, ok := i.(string)
	if ok {
		fmt.Println("i is a string:", s)
	} else {
		fmt.Println("i is not a string")
	}

	f, ok := i.(float64)
	if ok {
		fmt.Println("i is a float64:", f)
	} else {
		fmt.Println("i is not a float64")
	}
}

自然な日本語で言い換えると次のようになります。

i is a string: Hello
i is not a float64

上記の例、i は文字列を持つ空インターフェイス型の変数です、タイプアサーションを使い i が文字列型かを調べ、結果は s と ok に代入されます、アサーションが成功した場合(ok が true)、 i は文字列であり文字列の値が出力されます、アサーションが失敗した場合(ok が false)、i は文字列ではありませんが出力されます。

型アサーションを行う際には、アサートされる値がインターフェース型変数かまたはnilでなければパニックが発生することに注意してください。そのため、型アサーションを行う前には、アサーションが成功するかどうかを判定するために型アサーションの安全な形式を使用して、アサーションの結果と真偽値を組み合わせる必要があります。

bannerAds