go判断interface类型及类型转换

在golang中,interface{}允许接纳任意值,类似于Java中的Object类型。

可以直接用switch value.(type) 来判断类型,如:

type Test struct {
    Test string
}

func test(value interface{}) {
    switch value.(type) {
    case string:
        // 将interface转为string字符串类型
        fmt.Println("value type is string")
    case int32:
        // 将interface转为int32类型
        fmt.Println("value type is int32")
    case int64:
        // 将interface转为int64类型
        fmt.Println("value type is int64")
    case Test:
        // 将interface转为Test struct类型
        fmt.Println("value type is Test struct")
    case []int:
        // 将interface转为切片类型
        fmt.Println("value type is Test []int")
    default:
        fmt.Println("unknown")
    }
}

如果是单类型判断和转换可以用 v , ok = value.(type) 来判断和转换。

  • v:转换后的值
  • ok:是否转换成功,如果类型不对,返回false
  • value:interface{}变量
  • type:需要转换的类型,如:string、int32、int64、float64等等

如interface{}转string:

func test(value interface{}) {

    if op, ok := value.(string); ok {
        fmt.Println("value type is string:", op)
    } else {
        fmt.Println("value type is not string")
    }
}
0%