🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 空接口定义 空接口是指没有定义任何方法的接口类型。因此任何类型都可以视为实现了空接口。也正是因为空接口类型的这个特性,空接口类型的变量可以存储任意类型的值。 ```go /* var i interface{} 等价于 type Any interface{} var i Any */ var i interface{} // 整型 i = 1 fmt.Printf("i: %v, type: %T\n", i, i) // 浮点数 i = 1.35 fmt.Printf("i: %v, type: %T\n", i, i) // 字符串 i = "jiaxzeng" fmt.Printf("i: %v, type: %T\n", i, i) // 布尔值 i = true fmt.Printf("i: %v, type: %T\n", i, i) // 切片 i = []string{"jiaxzeng", "xiaodunan"} fmt.Printf("i: %v, type: %T\n", i, i) // map 映射 i = map[int]string{1: "jiaxzeng"} fmt.Printf("i: %v, type: %T\n", i, i) // 指针 x := "jiaxzeng" i = &x fmt.Printf("i: %v, type: %T\n", i, i) // 运行结果: // i: 1, type: int // i: 1.35, type: float64 // i: jiaxzeng, type: string // i: true, type: bool // i: [jiaxzeng xiaodunan], type: []string // i: map[1:jiaxzeng], type: map[int]string // i: 0xc000010290, type: *string ``` ## 空接口应用 ### 空接口作为函数的参数 使用空接口实现可以接收任意类型的函数参数。 ```go func showType(x interface{}) { fmt.Printf("x is value: %v, x is type: %T\n", x, x) } func main() { showType(1) showType("jiaxzeng") showType(1.5) showType([]string{"jiaxzeng"}) showType(map[string]string{"name": "jiaxzeng"}) x := 18 showType(&x) } // 运行结果: // x is value: 1, x is type: int // x is value: jiaxzeng, x is type: string // x is value: 1.5, x is type: float64 // x is value: [jiaxzeng], x is type: []string // x is value: map[name:jiaxzeng], x is type: map[string]string // x is value: 0xc0000ba010, x is type: *int ``` ### 空接口作为map的值 使用空接口实现可以保存任意值的字典。 ```go m := make(map[string]interface{}) m["name"] = "jiaxzeng" m["age"] = 18 m["course"] = []string{"Kubernetes", "Golang", "Python"} fmt.Printf("m: %v\n", m) ```