LoginSignup
2
1

More than 3 years have passed since last update.

型アサーション

Posted at

プログラミング言語Goを読んでいて、型アサーションの説明が分かりづらかったのでメモ

型アサーション

型アサーションはインタフェースの値に使えるインタフェース型の変換のようなものである

io.Writerインタフェース型の値があるとする

var w io.Writer
w = os.Stdout
fmt.Printf("type = %T\n", w) // type = *os.File

この時、wが別のインタフェース型になれるか調べることができる

rw := w.(io.ReadWriter) // 成功する

(*os.File)型はReadおよびWriteのメソッドを持っているため成功する。
rwでは、ReadWriterで定義されているメソッドReadも追加で呼ぶことができる

失敗した場合はpanicが発生するが、成功したかという変数を受け取ればpanicは発生しない

var w io.Writer
w = new(ByteCounter) // ByteCounterは、ReadメソッドがないためReadWriterインタフェースは満たせない
rw := w.(io.ReadWriter) // panicが発生する 
rw, ok = w.(io.ReadWriter) // rwにはゼロ値、okにはfalseが入る
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1