b.(string)被称为 类型断言 。如
有效围棋中所述
:
类型断言采用接口值并从中提取指定的显式类型的值。
因此,是的,您从类型断言中获得的值不是接口值,而是显式类型。您还可以通过添加无类型的布尔值来测试类型断言是否成功:
s, ok := b.(string) // s is of type stringif !ok { // b did not contain a value of type string!}编辑:
为了进一步说明以消除任何可能的误解:
类型断言不会像您建议的那样 “告诉go b是字符串”
。它的作用是,它将在运行时尝试从中提取一个字符串
b,如果
b包含其他类型,则会恐慌(除非分配可选的bool值)。
从断言中获得的值确实是类型
string,允许您执行诸如切片(无法切片接口值)或检查其值之类的操作
len。



