Go interface

Type Assertion

Type Assertion(类型断言)是用于interface value的一种操作。语法如下:

1
x.(T)

x是interface type的表达式,而T是assertd type,被断言的类型。

类型断言的使用主要有两种情景:

  • 如果asserted type是一个concrete type(具体类型),一个实例类type,断言会检查x的dynamic type是否和T相同,如果相同,断言的结果是x的dynamic value, 当然dynamic value的type就是T了。换句话说,对concrete type的断言实际上是获取x的dynamic value.
  • 如果asserted type是一个interface type,断言的目的是为了检测x的dynamic type是否满足T,如果满足,断言的结果是满足T的表达式,但是其dynamic type和dynamic value与x是一样的。换句话说,对interface type的断言实际上改变了x的type,通常是一个更大的method set的interface type,但是保留原来的dynamic type和dynamic value。

参考文章: