根据Go规范:
对于接口类型和类型T的表达式x,主表达式x。(T)断言x不是nil,并且存储在x中的值是T类型。
“类型断言”允许您声明一个接口值包含某个特定类型或它的具体类型满足另一个接口。
在您的示例中,您断言数据(类型interface {})具有具体的类型字符串。如果输入错误,则程序将在运行时崩溃。您无需担心效率,只需要比较两个指针值即可。
如果不确定是否为字符串,则可以使用两种返回语法进行测试。
str, ok := data.(string)
如果data不是字符串,则ok为假。然后通常将这样的语句包装到if语句中,如下所示:
if str, ok := data.(string); ok {
/* act on str */
} else {
/* not string */
}