// interface{} 在 Go 中是一个特殊的类型,表示任何类型,类似于 C# 中的 object 类型或 Java 中的 Object 类型。
// 它可以接收任何类型的值,但如果我们需要使用其原始类型的值,我们需要进行类型断言。
package main import ( "fmt" ) func main() { // 定义一个空接口类型的变量 可以给空接口类型的变量赋任何类型的值 var id interface{} id = "123" fmt.Printf("%T \t %v \n", id, id) // 使用类型断言来获取原始类型的值 var uid string if value, ok := id.(string); ok { uid = value } fmt.Printf("%T \t %v \n", uid, uid) id = 123.456 var fid float64 if value, ok := id.(float64); ok { fid = value } fmt.Printf("%T \t %v \n", fid, fid) switchVal(123456.1234) switchVal("123456.1234") switchVal(true) switchVal(123) } // 使用 switch 语句进行类型断言 func switchVal(val interface{}) { switch v := val.(type) { case string: value := v fmt.Printf("%T \t %v \n", value, value) case int: value := v fmt.Printf("%T \t %v \n", value, value) case int8: value := v fmt.Printf("%T \t %v \n", value, value) case int32: value := v fmt.Printf("%T \t %v \n", value, value) case int64: value := v fmt.Printf("%T \t %v \n", value, value) case float32: value := v fmt.Printf("%T \t %v \n", value, value) case float64: value := v fmt.Printf("%T \t %v \n", value, value) case bool: value := v fmt.Printf("%T \t %v \n", value, value) default: fmt.Printf("%T \t %v \n", val, val) } }