Go类型断言

语法

<目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言
  <目标类型的值> := <表达式>.( 目标类型 )  //非安全类型断言

注意

必须为initerface类型才可以进行类型断言
比如如下代码会报错

s := "Chenchao"
if v, ok := s.(string); ok {
    fmt.Println(v)
}

会报错:invalid type assertion: s.(string) (non-interface type string on left)
在这里只要是在声明时或函数传进来的参数不是interface类型那么做类型断言都是回报 non-interface的错误的
所以我们只能通过将s作为一个interface{}的方法来进行类型断言 如下代码所示

s := "BrainWu"
if v, ok := interface{}(s).(string); ok {
    fmt.Println(v)
}

将s显示的转换为interface{}接口类型则可以进行类型断言了

你可能感兴趣的:(Go类型断言)