添加另一个使用的答案switch......那里有更全面的例子,但这会给你这个想法。


例如,t成为每个case范围内的指定数据类型。请注意,您必须case在一个类型中仅提供一种类型,否则t仍然是interface.


package main


import "fmt"


func main() {

    var val interface{} // your starting value

    val = 4


    var i int // your final value


    switch t := val.(type) {

    case int:

        fmt.Printf("%d == %T\n", t, t)

        i = t

    case int8:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case int16:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case int32:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case int64:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case bool:

        fmt.Printf("%t == %T\n", t, t)

        // // not covertible unless...

        // if t {

        //  i = 1

        // } else {

        //  i = 0

        // }

    case float32:

        fmt.Printf("%g == %T\n", t, t)

        i = int(t) // standardizes across systems

    case float64:

        fmt.Printf("%f == %T\n", t, t)

        i = int(t) // standardizes across systems

    case uint8:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case uint16:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case uint32:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case uint64:

        fmt.Printf("%d == %T\n", t, t)

        i = int(t) // standardizes across systems

    case string:

        fmt.Printf("%s == %T\n", t, t)

        // gets a little messy...

    default:

        // what is it then?

        fmt.Printf("%v == %T\n", t, t)

    }


    fmt.Printf("i == %d\n", i)

}