Closed2

『GO言語で作るインタプリタ』を読む

kentkent

型アサーションについて
https://go.dev/ref/spec#Type_assertions

a tour of goのこちらもあわせて
https://go-tour-jp.appspot.com/methods/15

今の自分の理解では、

x := hoge.(T)

とすることで型の制約をかけた宣言ができ、

x, ok := hoge.(T)

とすることで、Tでの型の制約が成功したかどうかをokで見ることができる。

例えば

exp, ok := stmt.Expression.(*ast.PrefixExpression)
if !ok {
    t.Fatalf("stmt is not ast.PrefixExpression. got=%T", stmt.Expression)
}

これは、stmtのExpressionがastパッケージのPrefixExpressionのポインタ型になっているかどうかを確認している、のだと思う。

kentkent

『プログラミング言語GO』に次のような記載があって、ちょっとわかった気がしたのでメモ

_, ok := x.(T) //型を検査するが、結果は破棄

つまり型の検査に型アサーションを使っている。テストの中で型のチェックに使われているというわけ。

このスクラップは2022/06/18にクローズされました